原文:http://blog.csdn.net/zzcchunter/article/details/8002285
popWinPlaylist.showAtLocation(vv_main, Gravity.TOP|Gravity.LEFT, 0, 150);
popWinPlaylist.setFocusable(true);
popWinPlaylist.update();
这下出现了 popupwindow 意外的地方不能点击了
最近项目中有用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显示时 无法响应按手机返回等键了!
分享到:
相关推荐
点击ListView弹出PopupWindow仿腾讯新闻
Android 单击listview弹出popupwindow弹出框,里面还附带listview右滑删除按钮。博客网址:http://blog.csdn.net/qq_16064871
PopupWindow和ListView配合使用,包含PopupWindow的取消,Back键取消,ListView的点击事件。
PopupWindow+ListView
PopupWindow ListView 单选的简单实现
PopupWindow + ListView + Singleselect
AndroidListView+PopupWindow实现item点击弹出PopupWindow 博客地址:https://blog.csdn.net/dreams_deng/article/details/104618270
在activitiity里面加一个fragment,在这个fragment里面加一...每行数据有一个textview与button组成,点击上面的button,会弹出一个popupwindow,popupwindow里面加入一个spinner控件,spinner这个下拉列表,插入2个选项
Demo实现了PopupWindow嵌套ListView,使用简单方法解决ListView宽度自适应问题;以及包含使用AndroidStudio制作9.png图片;
在PopupWindow中嵌入ListView,ListView中的item可在顶部与底部之间跳跃.
popupwindow中用listView绑定数据并显示在View上方
实现在android的popupwindow中显示listview.docx
大家可自行学习,研究,并补充该demo.
在android中显示listview自己适配的方式; 博客链接:blog.csdn.net/zgyulongfei
Android之用PopupWindow实现弹出listview形式菜单.rar
使用PopupWindow + 2个ListView实现仿 美团/淘宝/百度糯米 多级分类菜单效果
自定义的listview、GridView、 Popupwindow简易demo,适合初学者学习,简单易懂
PopupWindow+ListView实现Android搜索框
popupwindow下拉布局为:listView、Gridview、二级菜单listview。将其写成Util类,只要将数据源和在哪个控件弹出的对象传入就可以直接引用并且设置item的点击事件。
弹出的popuwindow的背景我用的是微信的那个图片 里面使用的listview填充的数据 希望能帮到你