android popupWindow伪菜单背景半透明以及触摸事件的相关有关问题

android popupWindow伪菜单背景半透明以及触摸事件的相关问题
先看两个截图:
android popupWindow伪菜单背景半透明以及触摸事件的相关有关问题
android popupWindow伪菜单背景半透明以及触摸事件的相关有关问题

点击menu键就显示底部的伪菜单,同时加了popupWindow.setOnDismissListener(new poponDismissListener());监听,显示的时候就把窗体变为半透明,关闭就还原窗体状态。
我想要的功能:当显示伪菜单的时候,除了伪菜单区域可以操作,其区域外面(也就是半透明部分)就不可以操作,只有当关闭伪菜单的时候,才可以操作半透明区域。
现在我已经实现了的有:
1,显示伪菜单,并且背景透明。
2,显示的时候,只有伪菜单区域可操作,半透明区域不可操作。

问题:伪菜单显示的时候,按back键以及再次点击menu键,按常理伪菜单就会被dismiss()掉。可以我发现,点击这两个按钮没反应,伪菜单始终不会被dismiss()掉。请问这是为什么?求大神们指点!
------解决思路----------------------
为什么用 popwindow ?  不是有原生的menu吗?
------解决思路----------------------
在onkeydown 或onkeyup事件的返回按键中加入隐藏的代码
if(popupWindow!=null&& popupWindow.isShow()){
popupWindow.dissmiss();
}
------解决思路----------------------
我还想说用ActionBar呢。。楼主就解决了
------解决思路----------------------
引用:
Quote: 引用:

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

android popupWindow伪菜单背景半透明以及触摸事件的相关有关问题已经搞定了!
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;
}
}

android popupWindow伪菜单背景半透明以及触摸事件的相关有关问题android popupWindow伪菜单背景半透明以及触摸事件的相关有关问题android popupWindow伪菜单背景半透明以及触摸事件的相关有关问题


解决了就好,祝好运!