自定义底部菜单栏

自定义底部菜单栏
    系统自带的菜单栏缺陷:一个页面最多只能显示6个菜单项;不能设置menu的背景色和单击变成自己希望背景色;因为系统自带显示单一,所以那么就来自定义自己的菜单栏吧,让你的菜单栏更漂亮。 

效果图片:自定义的底部菜单栏:

未命名图片.png

 


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;

}

}

});

原文地址:https://www.cnblogs.com/zhwl/p/2186050.html