PopupWindow弹出使背景变暗的问题
PopupWindow弹出使背景变暗的问题
昵称不许重名 发表于2年前
PopupWindow弹出使背景变暗的问题
  • 发表于 2年前
  • 阅读 37
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

今天有个需求是要在点击操作是,从屏幕下面弹出一个如下的选择框:

首先想到的就是使用popuwindow来实现

做起来非常简单

        View contentView = View.inflate(mContext, R.layout.popupwindow, null);
        PopupWindow pop = new PopupWindow(contentView,LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT,true);
        pop.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        pop.setAnimationStyle(R.style.PopupAnimation);//这里设置pop弹出是的动画
       
        pop.showAtLocation(listView_t, Gravity.BOTTOM, 0, 0);//listView_t是pop下面的控件

但是需求是弹出选择项之后,背景需要变成灰色半透明的;

网上搜了一下,实现方法有很多,觉得最方便的是下面这种:

void changeWindowAlpha(float toAlpha){
        final android.view.WindowManager.LayoutParams attributes = getWindow().getAttributes();
        attributes.alpha = toAlpha;
        getWindow().setAttributes(attributes);
    }

用WindowManager改变Activity的属性,这种方法很简单

但是这样写在有些机型上不能达到预期效果,比如华为的mate7就不行;

网上各种搜也没有结果,就只能自己想办法解决了;

然后发现有个attributes有个flag,他有些属性可以尝试一下

final android.view.WindowManager.LayoutParams attributes = getWindow().getAttributes();
//attributes 它有个flag属性
attributes.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;//可以看到这个flag的说明 
//Window flag: everything behind this window will be dimmed. 
//Use dimAmount to control the amount of dim.
//可以通过设置dimAmount属性来控制暗淡的量
attributes.dimAmount = toAlpha;

这样就可以了;

但是这样还有问题;

运行起来发现,弹出pop的时候背后的activity闪了一下,虽然不影响最终效果,但是总归不算完美解决;

然后看了一下flag的源码,发现flag所有的值定义有一定的规则;

基本都是2的次方,写成二进制就想下面这样:

00000001
00000010
00000100
00001000

当遇到这样的定义,就会想到flag可以用多个值进行‘或(|)’运算来赋值;

最终代码如下:

void changeWindowAlpha(float toAlpha){
        final android.view.WindowManager.LayoutParams attributes = getWindow().getAttributes();
        attributes.flags = attributes.flags | WindowManager.LayoutParams.FLAG_DIM_BEHIND;
        attributes.dimAmount = toAlpha;
        attributes.alpha = toAlpha;
        getWindow().setAttributes(attributes);
    }

这样就解决所有的问题了。

共有 人打赏支持
粉丝 0
博文 1
码字总数 474
×
昵称不许重名
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: