最近项目中有用PopupWindow。我在其中添加一个ListView放入PopupWindow中,然后对对PopupWindow设置了setFocusable(true)让PopupWindow获得了焦点。初始化PopupWindow
parameterView=this.getLayoutInflater().inflate(R.layout.parameterpopup, null);
parametPopLayout=(LinearLayout)parameterView.findViewById(R.id.parametPopLayout);
parameter_list=(ListView)parameterView.findViewById(R.id.parameter_list);
parameterPop = new PopupWindow(parameterView, 140, ViewGroup.LayoutParams.WRAP_CONTENT);
parameterPop.setOutsideTouchable(true);
这时候问题来了当你点击页面中其它控件是无法响应的。发现很多人都有遇到这个困惑。其实你可以通过pw(PopupWindow对象).getContextView()拿到他的父视图。然后通过给父视图注册事件 让pw失去焦点 。我项目中是通过一个按钮点击之后显示pw.如下:
实例化按钮
imgbtn=(ImageButton)map.findViewById(R.id.imgBtn);
imgbtn.setOnClickListener(this);//注册事件
parameterPop.setOutsideTouchable(true);
selectListAdapter adapter1=new selectListAdapter(this,showItem);
parameter_list.setAdapter(adapter1);
parameter_list.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
parameterPop.dismiss();
}
});
if(parameterPop.isShowing()){
parameterPop.dismiss();
}else{
showPop=true;
parameterPop.showAtLocation(v, Gravity.LEFT, 10, 40);
parameterPop.setFocusable(true);
parameterPop.update();
//做一个不在焦点外的处理事件监听
parameterPop.getContentView().setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
parameterPop.setFocusable(false);
parameterPop.dismiss();
return true;
}
});
}
从而解决了这个问题。还有一个问题就是如果当Pw显示之后。你想按返回等系统键也是无法响应的。那我们应该如何来处理咧?相信看了上面代码的应该会明白。要响应谁就交给谁。setFocusable(true)此时已经让Pw获取了焦点。解决办法:因为Pw里放置了ListView。可以利用setOnKeyListener对Pw里的ListView 设置监听代码如下:
parameter_list.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
parameterPop.dismiss();
return false;
}
});
就能解决当Pw显示时 无法响应按手机返回等键了!
分享到:
相关推荐
实现在android的popupwindow中显示listview.docx
在android中显示listview自己适配的方式; 博客链接:blog.csdn.net/zgyulongfei
Demo实现了PopupWindow嵌套ListView,使用简单方法解决ListView宽度自适应问题;以及包含使用AndroidStudio制作9.png图片;
PopupWindow和ListView配合使用,包含PopupWindow的取消,Back键取消,ListView的点击事件。
PopupWindow ListView 单选的简单实现
PopupWindow+ListView
实现在android的popupwindow中显示listview.docx
在PopupWindow中嵌入ListView,ListView中的item可在顶部与底部之间跳跃.
Android: PopupWindow 上显示 ListView 并相应 Demo (仿QQ登录界面,待改进)
Android 单击listview弹出popupwindow弹出框,里面还附带listview右滑删除按钮。博客网址:http://blog.csdn.net/qq_16064871
在popupwindow中显示listview的自适配方式。 blog.csdn.net/zgyulongfei
popupwindow中用listView绑定数据并显示在View上方
Android之用PopupWindow实现弹出listview形式菜单.rar
PopupWindow + ListView + Singleselect
PopupWindow+ListView实现Android搜索框
AndroidListView+PopupWindow实现item点击弹出PopupWindow 博客地址:https://blog.csdn.net/dreams_deng/article/details/104618270
大家可自行学习,研究,并补充该demo.
点击ListView弹出PopupWindow仿腾讯新闻
popupwindow + listview 多级展示
自定义的listview、GridView、 Popupwindow简易demo,适合初学者学习,简单易懂