文档章节

PopupWindow弹出使背景变暗的问题

 昵称不许重名
发布于 2015/10/23 11:37
字数 474
阅读 65
收藏 0

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

首先想到的就是使用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
作品 0
武汉
Android之自定义AlertDialog和PopupWindow实现(仿微信Dialog)

我们知道,在很多时候,我们都不用Android内置的一些控件,而是自己自定义一些自己想要的控件,这样显得界面更美观。 今天主要是讲自定义AlertDialog和popupWindow的使用,在很多需求中,我们...

moz1q1
2015/08/26
0
1
Android:PopupWindow

一、概述 1、构造方法 部分常用: PopupWindow(View contentView, int width, int height)Create a new non focusable popup window which can display the contentView.PopupWindow(View c......

Xushao
2013/12/16
0
2
Android 超高仿微信图片选择器 图片该这么加载

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自:【张鸿洋的博客】 1、概述 关于手机图片加载器,在当今像素随随便便破千万的时代,一张图片占据的...

丁佳辉
2015/09/23
0
0
使用 PopupWindow 的时候遇到Activity com.avcit… has leaked

在OnCreate方法中调用 > popupWindow.showAtLocation(view, Gravity.LEFT Gravity.TOP, x, y); 时,会出现以下错误: 这是因为这个popupWindow依赖的父Activity已经finish()的了,但是它还...

BravoZu
2013/12/27
0
0
Android Activity启动后立即弹出PopupWindow的两个方法

Activity启动后立即弹出PopupWindow的两个方法 若在Activity的onCreate()方法中直接写弹出PopupWindow方法会报错,因为activity没有完全启动是不能 弹出PopupWindow的。 那我们只需要在activ...

扬名立万
2014/05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
46分钟前
0
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
3
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
2
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
3
0
中秋快乐!!!

HiBlock
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部