/** 创建MENU */ public boolean onCreateOptionsMenu(Menu menu) { menu.add("menu");// 必须创建一项 return super.onCreateOptionsMenu(menu); } /** 拦截MENU */ public boolean onMenuOpened(int featureId, Menu menu) { initPopuWindow(); return false;// 返回为true 则显示系统menu } /** * popuwindow 自定义Menus */ private void initPopuWindow(){ View view = LayoutInflater.from(this).inflate(R.layout.tab_menu, null); popupWindow = new PopupWindow(view,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); popupWindow.setBackgroundDrawable(new BitmapDrawable()); /*设置触摸外面时消失*/ popupWindow.setOutsideTouchable(true); /*设置系统动画*/ popupWindow.setAnimationStyle(R.style.PopupAnimation); popupWindow.update(); popupWindow.setTouchable(true); /*设置点击menu以外其他地方以及返回键退出*/ popupWindow.setFocusable(true); popupWindow.showAtLocation(mLayout,Gravity.BOTTOM, 0, 0); /** * 解决再次点击MENU键无反应问题 */ view.setFocusableInTouchMode(true); view.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { // TODO Auto-generated method stub if ((keyCode == KeyEvent.KEYCODE_MENU)&&(popupWindow.isShowing())) { //模拟menu的PopupWindow退出 popupWindow.dismiss(); return true; }else if(event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK){//返回键popuwindow消失 popupWindow.dismiss(); return false; } return false; } });
popu_enter.xm:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="1000" /> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="1000" /> </set>
popu_exit.xml:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="1000" /> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="1000" /> </set>
popup_animation.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="PopupAnimation" parent="android:Animation"> <item name="android:windowEnterAnimation">@anim/popup_enter</item> <item name="android:windowExitAnimation">@anim/popup_exit</item> </style> </resources>