关于PopupWindow一些用法

直接上代码,代码给注释。

private void showPopupWindow() {
    View contentView = LayoutInflater.from(EarningsActivity.this).inflate(R.layout.view_popupwindow_earning, null);   
    mPopupWindow = new PopupWindow(contentView);
    // 设置PopupWindow为包裹内容
    mPopupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);  
    mPopupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
    // 设置响应触摸事件,设置不聚焦   
    mPopupWindow.setTouchable(true);   
    mPopupWindow.setFocusable(false);
    // setOutsideTouchable设置生效的前提是setTouchable(true)和setFocusable(false)   
    mPopupWindow.setOutsideTouchable(true);
    TextView tv1 = (TextView) contentView.findViewById(R.id.pop_yesterday);    
    TextView tv2 = (TextView) contentView.findViewById(R.id.pop_a_week);    
    TextView tv3 = (TextView) contentView.findViewById(R.id.pop_a_month);    
    TextView tv4 = (TextView) contentView.findViewById(R.id.pop_three_month);    
    tv1.setOnClickListener(this);   
    tv2.setOnClickListener(this);    
    tv3.setOnClickListener(this);    
    tv4.setOnClickListener(this);    
    // 设置PopupWindow在某控件的下方    
    mPopupWindow.showAsDropDown(mLl_menu);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (mPopupWindow != null && mPopupWindow.isShowing()) {
        mPopupWindow.dismiss();
    }
    return true;
}

在设置 PopupWindow 的时候,博主的手机(vivo 吐槽下这个手机的屁事真的多)一直出现一个问题,就是无论点击外部区域还是Back键都无法 dismiss 弹框,网上有说不设置背景就不能响应返回键和点击外部消失(这个博主没有自己尝试过,因为在之前就已经在布局设置好了背景颜色,如果还没有设置背景颜色导致无法响应事件的小伙伴就赶快设置背景颜色吧),最后再设置Activity的onTouchEvent(),就可以成功的点击外部区域 dismiss PopupWindow了。

有的小伙伴可能不知道PopupWindow可以设置在View的下面,也可以设置在View的上面,当我们使用.showAsDropDown();这个方法时候,不妨点进去看一下源码,在这个方法下面还有两个重载的方法,只是传递的参数不同。我们可以用到下面两个的任意一个

showAsDropDown(View anchor, int xoff, int yoff);
or 
showAsDropDown(View anchor, int xoff, int yoff, int gravity);
可以实现对位置进行设置。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值