我找了好久没发现怎么给系统自带的menu换背景,网上有个帖子写了相关方法,但是我没实现
所以才去了用popupwindow来实现menu:
先定义了这个popupwindow类:
然后在主程序里面 生成这个类的对象,在自己想要显示的位置显示之
popupwindow 里面的gridview设置的监听器 handler发出的消息会在主程序中做相应的动作
gridView里面 设置TRANSPARENT 是为了去掉 自身的点击效果,用来加上自己的selector
然后在adapter里面可以对 单个的Item 设置clickable 同时 换七背景来实现
类似menu的不可点击事件。
所以才去了用popupwindow来实现menu:
先定义了这个popupwindow类:
public class MenuPopupWindow {
public PopupWindow pop;
private Context ctx;
boolean isPopShowing = false;
Handler menuHandler;
public MenuPopupWindow(Context ctx,Handler menuHandler){
this.ctx = ctx;
this.menuHandler = menuHandler;
initMenu();
}
private void initMenu() {
LayoutInflater inflater = LayoutInflater.from(ctx);
View view = inflater.inflate(R.layout.popwindow, null);
pop = new PopupWindow(view, 480, 173);// 大小设置
pop.setOutsideTouchable(false);
// 很奇怪,不设置background 点击pop外面,pop不会消失
// pop.setBackgroundDrawable(new BitmapDrawable());
pop.setBackgroundDrawable(ctx.getResources().getDrawable(R.drawable.menubg));
pop.setFocusable(true);// 如果不加这个,Grid不会响应ItemClick
pop.setOnDismissListener(new OnDismissListener() {
public void onDismiss() {
isPopShowing = false;
}
});
GridView menuGrid = (GridView) view.findViewById(R.id.gridview);
menuGrid.setSelector(new ColorDrawable(Color.TRANSPARENT));
menuGrid.setAdapter(new AdapterGridView(ctx));
// menuGrid.setAdapter(getMenuAdapter(menuNameArray, menuImageArray));
menuGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
menuHandler.sendEmptyMessage(arg2);//发消息给主线程来处理
if (pop.isShowing()) // 关闭菜单
pop.dismiss();
}
});
menuGrid.setOnKeyListener(onKey);
}
OnKeyListener onKey = new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_MENU && isPopShowing == false) {
isPopShowing = true;
} else {
isPopShowing = false;
pop.dismiss();
}
return false;
}
};
}
然后在主程序里面 生成这个类的对象,在自己想要显示的位置显示之
MenuPopupWindow myPop = new MenuPopupWindow(this,menuHandler);
pop = myPop.pop;
public boolean onCreateOptionsMenu(Menu menu) {
pop.showAtLocation(findViewById(R.id.main), Gravity.CENTER
| Gravity.BOTTOM, 0, 0);
return false;
}
popupwindow 里面的gridview设置的监听器 handler发出的消息会在主程序中做相应的动作
public Handler menuHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
//do something
break;
case 1:
//do something
break;
case 2:
//do something
break;
case 3:
//do something
break;
case 4:
//do something
break;
case 5:
//do something
break;
default:
break;
}
}
};
gridView里面 设置TRANSPARENT 是为了去掉 自身的点击效果,用来加上自己的selector
然后在adapter里面可以对 单个的Item 设置clickable 同时 换七背景来实现
类似menu的不可点击事件。