Android 自定义底部公用菜单
注释:此案例主要展示自定义底部菜单,一处封装处处调用。使用起来相当方便
一、初始的Activity
package com.example.myapi.buttommenu;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import com.example.myapi.R;
import com.example.myapi.buttommenu.MenuUtils.MeunOnClickListener;
public class Menu1Activity extends Activity implements MeunOnClickListener,OnClickListener{
private MenuUtils menuUtils;
private Button btn_two;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu1);
menuUtils = (MenuUtils)findViewById(R.id.menu_utils);
menuUtils.setMenuListener(this);
btn_two = (Button)findViewById(R.id.btn_two);
btn_two.setOnClickListener(this);
}
@Override
public void menuOne() {
Toast.makeText(this, "您点击了菜单一", Toast.LENGTH_LONG).show();
}
@Override
public void menuTwo() {
Toast.makeText(this, "您点击了菜单二", Toast.LENGTH_LONG).show();
}
@Override
public void menuThree() {
Toast.makeText(this, "您点击了菜单三", Toast.LENGTH_LONG).show();
}
@Override
public void menuFour() {
Toast.makeText(this, "您点击了菜单四", Toast.LENGTH_LONG).show();
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn_two:
Intent intent = new Intent();
intent.setClass(this, Menu2Activity.class);
startActivity(intent);
break;
}
}
}
第二个Activity
package com.example.myapi.buttommenu;
import com.example.myapi.R;
import com.example.myapi.buttommenu.MenuUtils.MeunOnClickListener;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class Menu2Activity extends Activity implements MeunOnClickListener{
private MenuUtils menuUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu2);
menuUtils = (MenuUtils)findViewById(R.id.menu_utils);
menuUtils.setMenuListener(this);
}
@Override
public void menuOne() {
Toast.makeText(this, "您点击了菜单一", Toast.LENGTH_LONG).show();
}
@Override
public void menuTwo() {
Toast.makeText(this, "您点击了菜单二", Toast.LENGTH_LONG).show();
}
@Override
public void menuThree() {
Toast.makeText(this, "您点击了菜单三", Toast.LENGTH_LONG).show();
}
@Override
public void menuFour() {
Toast.makeText(this, "您点击了菜单四", Toast.LENGTH_LONG).show();
}
}
自定义Menu
package com.example.myapi.buttommenu;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import com.example.myapi.R;
/**
* 菜单工具类
* @author
* *
*/
public class MenuUtils extends LinearLayout implements OnClickListener{
private Button btn_1;
private Button btn_2;
private Button btn_3;
private Button btn_4;
private Context context;
private MeunOnClickListener listener;
public MenuUtils(Context context) {
super(context);
this.context = context;
initView(context);
}
public MenuUtils(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
private void initView(Context context){
LinearLayout menuView = (LinearLayout)LayoutInflater.from(context).inflate(com.example.myapi.R.layout.menutuils, null);
addView(menuView);
btn_1 = (Button)menuView.findViewById(R.id.btn_1);
btn_2 = (Button)menuView.findViewById(R.id.btn_2);
btn_3 = (Button)menuView.findViewById(R.id.btn_3);
btn_4 = (Button)menuView.findViewById(R.id.btn_4);
btn_1.setOnClickListener(this);
btn_2.setOnClickListener(this);
btn_3.setOnClickListener(this);
btn_4.setOnClickListener(this);
}
public void setMenuListener(MeunOnClickListener listener){
this.listener = listener;
}
public interface MeunOnClickListener{
public void menuOne();
public void menuTwo();
public void menuThree();
public void menuFour();
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn_1:
listener.menuOne();
break;
case R.id.btn_2:
listener.menuTwo();
break;
case R.id.btn_3:
listener.menuThree();
break;
case R.id.btn_4:
listener.menuFour();
break;
}
}
}
一下是布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.example.myapi.buttommenu.MenuUtils
android:id="@+id/menu_utils"
android:layout_width="fill_parent"
android:layout_height="60dp"
/>
<Button
android:id="@+id/btn_two"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="跳转到第二个界面"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.example.myapi.buttommenu.MenuUtils
android:id="@+id/menu_utils"
android:layout_width="fill_parent"
android:layout_height="60dp"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="菜单一"/>
<Button
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1"
android:text="菜单二"/>
<Button
android:id="@+id/btn_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1"
android:text="菜单三"/>
<Button
android:id="@+id/btn_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1"
android:text="菜单四"/>
</LinearLayout>
</LinearLayout>
完毕
Android 自定义底部公用菜单的更多相关文章
- Android自定义底部带有动画的Dialog
Android自定义底部带有动画的Dialog 效果图 先看效果图,是不是你想要的呢 自定义Dialog package --.view; import android.app.Dialog; imp ...
- android 自定义下拉菜单
本实例的自定义下拉菜单主要是继承PopupWindow类来实现的弹出窗体,各种布局效果可以根据自己定义设计.弹出的动画效果主要用到了translate.alpha.scale,具体实现步骤如下: 先上 ...
- Android 自定义View修炼-Android 实现自定义的卫星式菜单(弧形菜单)View
一.总述 Android 实现卫星式菜单也叫弧形菜单的主要要做的工作如下:1.动画的处理2.自定义ViewGroup来实现卫星式菜单View (1)自定义属性 a. 在attrs.xml中 ...
- Android 自定义ListView实现底部分页刷新与顶部下拉刷新,androidlistview
在项目开发中,由于数据过大时,需要进行分页加载或下拉刷新,来缓解一次性加载的过长等待.本篇博文实例讲解通过自定义的ListView实现底部分页加载和顶部下拉刷新的效果. 其效果图: 一.ListVie ...
- Android自定义顶部栏及侧滑菜单和fragment+viewpag滑动切换的实现
嘿嘿嘿,关于android滑动的操作,是不是经常都会用到呢. 我肯定也要学习一下啦. https://blog.csdn.net/u013184970/article/details/82882107 ...
- Android 自定义View合集
自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/ ...
- Xamarin.Android之ActionBar与菜单
一.选项卡 如今很多应用都会使用碎片以便在同一个活动中能够显示多个不同的视图.在Android 3.0 以上的版本中,我们已经可以使用ActionBar提供的Tab来实现这种效果,而不需要我们自己去实 ...
- Android自定义View4——统计图View
1.介绍 周末在逛慕课网的时候,看到了一张学习计划报告图,详细记录了自己一周的学习情况,天天都是0节课啊!正好在学习Android自定义View,于是就想着自己去写了一个,这里先给出一张慕课网的图,和 ...
- Android 自定义View (五)——实践
前言: 前面已经介绍了<Android 自定义 view(四)-- onMeasure 方法理解>,那么这次我们就来小实践下吧 任务: 公司现有两个任务需要我完成 (1)监测液化天然气液压 ...
随机推荐
- TFS 打得你措手不及!TF53001:管理员已取消数据库操作
心塞.公司TFS突然挂了.签入获取 一直报 TF53001:管理员已取消数据库操作.公司开发部开发进度一下就受阻了.刚好有时关键时期. 在 老总的帮助下根据搜到的资料 .搞定了这个问题!问题出在数据库 ...
- Vue 爬坑之路(十)—— Vue2.5 + Typescript 构建项目
Typescript 在前端圈已经逐渐普及,Vue 2.5.0 改进了类型声明,使得对 TypeScript 更加友好 不过要想在项目中直接使用 TypeScript 仍然需要对项目进行一些改造 P ...
- python-模板方法模式
源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 模板方法模式时行为模式中比较简单的设计模式之一.模板方法关注这样的一类行为:该类 ...
- 过滤器(Filter)与拦截器(Interceptor)的区别
1 .拦截器是基于java的反射机制的,而过滤器是基于函数回调. 2 .拦截器不依赖与servlet容器,过滤器依赖与servlet容器. 3 .拦截器只能对action请求起作用,而过滤器则可以对几 ...
- Linux 配置iso系统盘为本地yum源
Linux配置iso系统盘为本地yum源 by:授客 QQ:1033553122 1.目的 安装软件时,经常会遇到包或类库的依赖性问题,为此,我们可以通过yum命令安装软件,尽量避免出现繁琐的软件 ...
- Python 列表(List)操作方法详解
Python 列表(List)操作方法详解 这篇文章主要介绍了Python中列表(List)的详解操作方法,包含创建.访问.更新.删除.其它操作等,需要的朋友可以参考下 列表是Python中最基本 ...
- Expo大作战(十三)--expo如何自定义状态了statusBar以及expo中如何处理脱机缓存加载 offline support
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Java语法基础(四)----循环结构语句
一.循环结构: 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则 ...
- Win10命令行激活 & 电脑组装
系统激活: 1. 管理员身份运行 cmd 2. slmgr.vbs /upk ...
- SQL Server 从2000复制数据到2008及以上版本的一种方法
1.通过Linked Servers 执行sql出现错误提示,无法执行复制数据操作. sql: insert into tb_User select from [**.**.*.**].DB.dbo. ...