popupwindow放置listview,并且使listview可以响应点击事件

本文详细介绍了如何在Android应用中解决PopWindow的点击事件问题,包括使PopWindow获取焦点、处理焦点外的点击事件、以及如何设置PopWindow背景为半透明,以保持界面交互的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在模仿微信的选择头像的功能,就是一个Popwindow里面是一个ListView,ListView是所有相册,用户点击里面的相册,那么那个相片展示的页面就会显示你选择的相册的相片

。刚开始发现里面的ListView不能获取点击事件,插入如下代码解决

popWinPlaylist.setFocusable(true);  
popWinPlaylist.update();  

随后发现popwindown以外的地方不能响应点击事件,其实你可以通过pw(PopupWindow对象).getContextView()拿到他的父视图。然后通过给父视图注册事件 让pw失去焦点 。

 //做一个不在焦点外的处理事件监听  
    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;  
     }  
       
    });  
   }  

又发现一个问题,返回键不能响应点击事件,相信看了上面代码的应该会明白。要响应谁就交给谁。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 true;  
                }  
                  
            });  

还有一般我们弹出来PopWindow之后底下的界面是不会变的,我们可以用下面的方法来设置背景色

WindowManager.LayoutParams lp = getWindow().getAttributes();
		lp.alpha = 0.3f; //其实就是设置一下底下窗口的透明度,在dismiss之后设置回来就可以了
		getWindow().setAttributes(lp);



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值