自定义底部菜单栏
自定义底部菜单栏
系统自带的菜单栏缺陷:一个页面最多只能显示6个菜单项;不能设置menu的背景色和单击变成自己希望背景色;因为系统自带显示单一,所以那么就来自定义自己的菜单栏吧,让你的菜单栏更漂亮。
效果图片:自定义的底部菜单栏:
图
3、核心代码:学会了这些你就可以摆脱系统单一的菜单栏了,那么你就可以随心所欲的写自己绚丽的菜单了。
第一、自定义的menu其实没用到menu控件,完全是自定义的类似菜单那样的布局,menu.xml就免写了。
第二、关键是前台代码:
(1)自定义的菜单栏其实是当前按手机上的菜单键,弹出一个菜单窗口,当按手机上的退回键的时候,就让该窗口关闭,那怎么实现呢?
首先,在onKeyDown里面捕获menu,找到所要弹出的窗口布局,
public boolean onKeyDown(int keyCode, KeyEvent msg) {
if(keyCode==KeyEvent.KEYCODE_MENU)
{
/通过View.inflate加载xml
inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
layout = inflater.inflate(R.layout.main,null);
pop = new PopupWindow(layout,480,350);//获取PopupWindow对象并设置窗体的大小
pop.showAtLocation(layout, Gravity.CENTER,20,470); //设置窗体的位置
pop.showAsDropDown(layout); //弹出menu窗口
其次:那怎么弹出窗口已经找到了,那怎么找到弹出窗口上的控件呢?如下代码:
home=(LinearLayout)layout.findViewById(R.id.home);
找到了弹出窗口id名为home的LinearLayout,找到了控件,那我们就可以对这些控件写事件了,
可以对该LinearLayout设置背景,这里遇到一个问题,就是之前我们是可以用xml写代码直接控制
LinearLayout单击时的背景颜色,当单击过后是另外一种颜色,但是通过inflate加载的xml,在xml上
设置样式,根本就不起作用,这是自己总结出来的。
那我们该怎么写”LinearLayout单击时的背景颜色,当单击过后是另外一种颜色“呢?代码如下:
home.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//单击时,可通过设置IsShow的boolean值,使得单击时是一种颜色,单击过后恢复单击前的颜色,不这么设置就会导致,当你单击了和单击后都会一直显示单击时的背景 色,不会有颜色变化。
if(IsShow==true)
{
home.setBackgroundResource(R.drawable.tab_two_highlight);//变色
//以下的背景色和和单击前颜色一样维持不变,是为了保持当单击一个LinearLayout的时候,其他的会变颜色,如果不这么写,会有一系列效果显示问题。
publish.setBackgroundResource(R.drawable.tab_one_normal);
change.setBackgroundResource(R.drawable.tab_one_normal);
more.setBackgroundResource(R.drawable.tab_one_normal);
IsShow=false;
}
//单击过后
else
{
home.setBackgroundResource(R.drawable.tab_one_normal);
publish.setBackgroundResource(R.drawable.tab_one_normal);
change.setBackgroundResource(R.drawable.tab_one_normal);
more.setBackgroundResource(R.drawable.tab_one_normal);
IsShow=true;
}
}
});