Android提高篇-自定义Menu(二)

 /** 创建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> 

 

 

posted @ 2012-12-08 10:47  暗殇  阅读(259)  评论(0)    收藏  举报