文档章节

PopupWindow弹出使背景变暗的问题

 昵称不许重名
发布于 2015/10/23 11:37
字数 474
阅读 76
收藏 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 超高仿微信图片选择器 图片该这么加载

版权声明:本文为博主原创文章,未经博主允许不得转载。 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
PopupWindow源码分析

目录介绍 1.最简单的创建方法 1.1 PopupWindow构造方法 1.2 显示PopupWindow 1.3 最简单的创建 1.4 注意问题宽和高属性 2.源码分析 2.1 setContentView(View contentView) 2.2 showAsDropDow...

潇湘剑雨
10/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RabbitMQ+PHP 教程三(Publish/Subscribe)用yii2测试通过

介绍 在前面的教程中,我们创建了一个工作队列。工作队列背后的假设是每个任务都交付给一个工作人员处理。在这一部分中,我们将做一些完全不同的事情——我们将向多个消费者发送消息。此模式...

hansonwong
23分钟前
2
0
关于JAVA你必须知道的那些事(四):单例模式和多态

好吧,今天一定要把面向对象的最后一个特性:多态,给说完。不过我们先来聊一聊设计模式,因为它很重要。 设计模式 官方的解释是,设计模式是:一套被反复使用,多数人知晓的,经过分类编目,...

拾光TM
23分钟前
1
0
ES6 系列之 Babel 是如何编译 Class 的(下)

摘要: ## 前言 在上一篇 [《 ES6 系列 Babel 是如何编译 Class 的(上)》](https://github.com/mqyqingfeng/Blog/issues/105),我们知道了 Babel 是如何编译 Class 的,这篇我们学习 Babel ...

阿里云官方博客
24分钟前
1
0
附实例!实现iframe父窗体与子窗体的通信

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表于云+社区专栏 本文主要会介绍如何基于MessengerJS,实现iframe父窗体与子窗体间的通信,传递数据信息。同时本...

腾讯云加社区
30分钟前
1
0
JSP页面传List集合到Action中

1:JSP页面(前端用的是H-UI框架) <div class="codeView docs-example"> <table class="table table-border table-bordered table-striped"> <thead> ......

uug
34分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部