解决方案 »

  1.   

    我先贴上源码 /**menu菜单选项*/
    private void showPopupWindow() {
    View view = (LinearLayout)getLayoutInflater()
    .inflate(R.layout.activity_menu_prop, null);
    LinearLayout scanmusic = (LinearLayout)view
    .findViewById(R.id.menu_scanmusic);
    LinearLayout equalizer = (LinearLayout)view
    .findViewById(R.id.menu_equalizer);
    LinearLayout sleep = (LinearLayout)view
    .findViewById(R.id.menu_sleep);
    LinearLayout preferences = (LinearLayout)view
    .findViewById(R.id.menu_preferences);
    LinearLayout exit = (LinearLayout)view
    .findViewById(R.id.menu_exit);
    LinearLayout menu_null = (LinearLayout)view
    .findViewById(R.id.menu_null);
    //设置选项size
    int newW = dm_width-Utils.dip2px(this, 0.5f);
    LinearLayout.LayoutParams param = 
    new LinearLayout.LayoutParams(newW/3, (newW/3)/3*2);
    scanmusic.setLayoutParams(param);
    equalizer.setLayoutParams(param);
    sleep.setLayoutParams(param); 
    preferences.setLayoutParams(param);
    exit.setLayoutParams(param);
    menu_null.setLayoutParams(param);

    scanmusic.setOnClickListener(new myOnClickListener());
    equalizer.setOnClickListener(new myOnClickListener());
    sleep.setOnClickListener(new myOnClickListener());
    preferences.setOnClickListener(new myOnClickListener());
    exit.setOnClickListener(new myOnClickListener());
    popupWindow = new PopupWindow(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT);
    popupWindow.setFocusable(true); //设置PopupWindow可获得焦点  
    popupWindow.setTouchable(true); //设置PopupWindow可触摸
    popupWindow.setOutsideTouchable(false); //设置非PopupWindow区域是否可触摸

    popupWindow.setContentView(view);
    backgroundAlpha(0.5f);
    //添加pop窗口关闭事件  
    popupWindow.setOnDismissListener(new poponDismissListener());
    popupWindow.setAnimationStyle(R.style.popuStyle); //设置 popupWindow动画样式
    popupWindow.showAtLocation(findViewById(R.id.main_layout), Gravity.BOTTOM, 0, 0);
    }
      

  2.   

    为什么用 popwindow ?  不是有原生的menu吗?
      

  3.   

    原生的menu菜单都是一字竖着在底部中间排列的!
      

  4.   

    在onkeydown 或onkeyup事件的返回按键中加入隐藏的代码
    if(popupWindow!=null&& popupWindow.isShow()){
    popupWindow.dissmiss();
    }
      

  5.   

    已经搞定了!
    View view = (LinearLayout)getLayoutInflater().inflate(R.layout.activity_menu_prop, null);在这个xml布局里最外层(我这里是LinearLayout)加上如下代码://下面部分代码主要用于响应按键事件(menu、back)
    LinearLayout layout = (LinearLayout)view.findViewById(R.id.menu_layout);
    layout.setFocusableInTouchMode(true);//能够获得焦点
    layout.setOnKeyListener(new OnKeyListener() {

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
                        switch(keyCode) {
                        case KeyEvent.KEYCODE_BACK:
                         closePopupWindow();
                            break;
                        case KeyEvent.KEYCODE_MENU:
                         closePopupWindow();
                            break;
                        }
                    }
                    return true;
    }
    });就OK了!非常完美!
    完整代码如下: /**menu菜单选项*/
    private void showPopupWindow() {
    View view = (LinearLayout)getLayoutInflater()
    .inflate(R.layout.activity_menu_prop, null);
    LinearLayout scanmusic = (LinearLayout)view
    .findViewById(R.id.menu_scanmusic);
    LinearLayout equalizer = (LinearLayout)view
    .findViewById(R.id.menu_equalizer);
    LinearLayout sleep = (LinearLayout)view
    .findViewById(R.id.menu_sleep);
    LinearLayout preferences = (LinearLayout)view
    .findViewById(R.id.menu_preferences);
    LinearLayout exit = (LinearLayout)view
    .findViewById(R.id.menu_exit);
    LinearLayout menu_null = (LinearLayout)view
    .findViewById(R.id.menu_null);
    //设置选项size
    int newW = dm_width-Utils.dip2px(this, 0.5f);
    LinearLayout.LayoutParams param = 
    new LinearLayout.LayoutParams(newW/3, (newW/3)/3*2);
    scanmusic.setLayoutParams(param);
    equalizer.setLayoutParams(param);
    sleep.setLayoutParams(param); 
    preferences.setLayoutParams(param);
    exit.setLayoutParams(param);
    menu_null.setLayoutParams(param);

    scanmusic.setOnClickListener(new myOnClickListener());
    equalizer.setOnClickListener(new myOnClickListener());
    sleep.setOnClickListener(new myOnClickListener());
    preferences.setOnClickListener(new myOnClickListener());
    exit.setOnClickListener(new myOnClickListener());
    popupWindow = new PopupWindow(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT);
    popupWindow.setContentView(view);
    popupWindow.setFocusable(true); //设置PopupWindow可获得焦点(设置setFocusable属性,会无法响应按键事件,因此在下面加上setOnKeyListener)
    popupWindow.setTouchable(true); //设置PopupWindow可触摸
    popupWindow.setOutsideTouchable(false); //设置非PopupWindow区域是否可触摸
    backgroundAlpha(0.4f);
    //添加pop窗口关闭事件
    popupWindow.setOnDismissListener(new poponDismissListener());
    popupWindow.setAnimationStyle(R.style.popuStyle); //设置 popupWindow动画样式
    popupWindow.showAtLocation(findViewById(R.id.main_layout), Gravity.BOTTOM, 0, 0);
    //下面部分代码主要用于响应按键事件(menu、back)
    LinearLayout layout = (LinearLayout)view.findViewById(R.id.menu_layout);
    layout.setFocusableInTouchMode(true);//能够获得焦点
    layout.setOnKeyListener(new OnKeyListener() {

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
                        switch(keyCode) {
                        case KeyEvent.KEYCODE_BACK:
                         closePopupWindow();
                            break;
                        case KeyEvent.KEYCODE_MENU:
                         closePopupWindow();
                            break;
                        }
                    }
                    return true;
    }
    });
    } /**关闭popupWindow*/
    private void closePopupWindow(){
    if (popupWindow!=null) {
    popupWindow.dismiss();
    popupWindow=null;
    }
    }
      

  6.   

    我还想说用ActionBar呢。。楼主就解决了
      

  7.   

    已经搞定了!
    View view = (LinearLayout)getLayoutInflater().inflate(R.layout.activity_menu_prop, null);在这个xml布局里最外层(我这里是LinearLayout)加上如下代码://下面部分代码主要用于响应按键事件(menu、back)
    LinearLayout layout = (LinearLayout)view.findViewById(R.id.menu_layout);
    layout.setFocusableInTouchMode(true);//能够获得焦点
    layout.setOnKeyListener(new OnKeyListener() {

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
                        switch(keyCode) {
                        case KeyEvent.KEYCODE_BACK:
                         closePopupWindow();
                            break;
                        case KeyEvent.KEYCODE_MENU:
                         closePopupWindow();
                            break;
                        }
                    }
                    return true;
    }
    });就OK了!非常完美!
    完整代码如下: /**menu菜单选项*/
    private void showPopupWindow() {
    View view = (LinearLayout)getLayoutInflater()
    .inflate(R.layout.activity_menu_prop, null);
    LinearLayout scanmusic = (LinearLayout)view
    .findViewById(R.id.menu_scanmusic);
    LinearLayout equalizer = (LinearLayout)view
    .findViewById(R.id.menu_equalizer);
    LinearLayout sleep = (LinearLayout)view
    .findViewById(R.id.menu_sleep);
    LinearLayout preferences = (LinearLayout)view
    .findViewById(R.id.menu_preferences);
    LinearLayout exit = (LinearLayout)view
    .findViewById(R.id.menu_exit);
    LinearLayout menu_null = (LinearLayout)view
    .findViewById(R.id.menu_null);
    //设置选项size
    int newW = dm_width-Utils.dip2px(this, 0.5f);
    LinearLayout.LayoutParams param = 
    new LinearLayout.LayoutParams(newW/3, (newW/3)/3*2);
    scanmusic.setLayoutParams(param);
    equalizer.setLayoutParams(param);
    sleep.setLayoutParams(param); 
    preferences.setLayoutParams(param);
    exit.setLayoutParams(param);
    menu_null.setLayoutParams(param);

    scanmusic.setOnClickListener(new myOnClickListener());
    equalizer.setOnClickListener(new myOnClickListener());
    sleep.setOnClickListener(new myOnClickListener());
    preferences.setOnClickListener(new myOnClickListener());
    exit.setOnClickListener(new myOnClickListener());
    popupWindow = new PopupWindow(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT);
    popupWindow.setContentView(view);
    popupWindow.setFocusable(true); //设置PopupWindow可获得焦点(设置setFocusable属性,会无法响应按键事件,因此在下面加上setOnKeyListener)
    popupWindow.setTouchable(true); //设置PopupWindow可触摸
    popupWindow.setOutsideTouchable(false); //设置非PopupWindow区域是否可触摸
    backgroundAlpha(0.4f);
    //添加pop窗口关闭事件
    popupWindow.setOnDismissListener(new poponDismissListener());
    popupWindow.setAnimationStyle(R.style.popuStyle); //设置 popupWindow动画样式
    popupWindow.showAtLocation(findViewById(R.id.main_layout), Gravity.BOTTOM, 0, 0);
    //下面部分代码主要用于响应按键事件(menu、back)
    LinearLayout layout = (LinearLayout)view.findViewById(R.id.menu_layout);
    layout.setFocusableInTouchMode(true);//能够获得焦点
    layout.setOnKeyListener(new OnKeyListener() {

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
                        switch(keyCode) {
                        case KeyEvent.KEYCODE_BACK:
                         closePopupWindow();
                            break;
                        case KeyEvent.KEYCODE_MENU:
                         closePopupWindow();
                            break;
                        }
                    }
                    return true;
    }
    });
    } /**关闭popupWindow*/
    private void closePopupWindow(){
    if (popupWindow!=null) {
    popupWindow.dismiss();
    popupWindow=null;
    }
    }解决了就好,祝好运!