文档章节

PopupWindow弹出使背景变暗的问题

 昵称不许重名
发布于 2015/10/23 11:37
字数 474
阅读 81
收藏 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
亲,还在为PopupWindow烦恼吗

亲,还在为PopupWindow烦恼吗 ps:预览图放到了文章最后 本文已经授权鸿洋公众号转载 这篇文章其实想写很久了,然而一直以来总觉得BasePopup达不到自己的期望,所以也没有怎么去传播推荐,也...

羽翼君
2018/12/19
0
0
Android 超高仿微信图片选择器 图片该这么加载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lmj623565791/article/details/39943731 转载请标明出处:http://blog.csdn.net/lmj623565791/article/detai...

鸿洋_
2014/10/14
0
0
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

没有更多内容

加载失败,请刷新页面

加载更多

centos7重置密码、单用户模式、救援模式、ls命令、chmod命令

在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如...

李超小牛子
今天
3
0
Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面

当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用...

程序员补给栈
今天
6
0
kafka在的使用

一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统...

狼王黄师傅
今天
3
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
3
0
大数据教程(11.8)Hive1.2.2简介&初体验

上一篇文章分析了Hive1.2.2的安装,本节博主将分享Hive的体验&Hive服务端和客户端的使用方法。 一、Hive与hadoop直接的关系 Hive利用HDFS存储数据,利用MapReduce查询数据。 二、Hive与传统数...

em_aaron
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部