文档章节

PopupWindow弹出使背景变暗的问题

 昵称不许重名
发布于 2015/10/23 11:37
字数 474
阅读 46
收藏 0
点赞 0
评论 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
popupwindow popupmenu dialog

private void iniPopupWindow() { LayoutInflater inflater = (LayoutInflater) this .getSystemService(Context.LAYOUTINFLATERSERVICE); View layout = inflater.inflate(R.layout.taskdet......

当空皓月
2014/10/29
0
0
使用 PopupWindow 的注意事项

预备知识 使用 PopupWindow 之前, 一定要知道 Android 是怎么响应旋转屏幕的. 如果不知道的话, 那就先去了解下这个知识点. >>> Google 关键词: Android Activity 重建 另外需要知道的就是Pop...

有初啊
2013/11/07
0
2
android PopupWindow响应返回键

如果PopupWindow在弹出的时候,需要按返回键消失,默认情况下是不响应的,需要使用setBackgroundDrawable函数设置。而我的布局文件已经设置了透明,不需要在设置背景图片了,因此想到将背景图...

qii
2014/05/14
0
1
android PopupWindow简单例子

在android中弹出框有两种方式:AlertDialog和PopupWindow,它们的不同点在于: 1、AlertDialog的位置固定,而PopupWindow的位置可以随意; 2、AlertDialog是非阻塞线程的,而PopupWindow是阻...

贺路的路
2013/07/08
0
4
Android 中 PopupWindow 在7.0后适配

这里主要记录一次踩坑的经历。 需求:如上图左侧效果,想在按钮的下方弹一个PopupWindow。嗯,很简单一个效果,然当适配7.0后发现这个PopupWindow显示异常,然后网上找到了下面这种方案。 7....

smart_dev
05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MyBatis入门

一、安装 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version></dependency> 二、从 XML 中构建 SqlSessionFactory String r......

一个yuanbeth
9分钟前
0
0
聊聊spring cloud的LoadBalancerAutoConfiguration

序 本文主要研究一下spring cloud的LoadBalancerAutoConfiguration RibbonAutoConfiguration spring-cloud-netflix-ribbon-2.0.0.RC2-sources.jar!/org/springframework/cloud/netflix/ribb......

go4it
11分钟前
0
0
【转】使用Lombok来优雅的编码

前言 Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。 正文 添加依赖 在 pom.xml 文件中添加相关依赖:...

HAVENT
13分钟前
0
0
Dubbo 源码解读 —— 可支持序列化及自定义扩展

一、概述 从源码中,我们可以看出来。目前,Dubbo 内部提供了 5 种序列化的方式,分别为 fastjson、Hessian2、Kryo、fst 及 Java原生支持的方式 。 针对不同的序列化方式,对比内容如下: 名...

Ryan-瑞恩
21分钟前
0
0
MySQL内存设置—— MySQL server has gone away

set global max_allowed_packet=268435456

一梦心草
30分钟前
0
0
推导式

列表、集合和字典推导式 列表推导式是Python最受喜爱的特性之一。它允许用户方便的从一个集合过滤元素,形成列表,在传递参数的过程中还可以修改元素。形式如下: [expr for val in collect...

火力全開
36分钟前
0
0
maven配置文件settings.xml详解

settings.xml有什么用? 如果在Eclipse中使用过Maven插件,想必会有这个经验:配置settings.xml文件的路径。 settings.xml文件是干什么的,为什么要配置它呢? 从settings.xml的文件名就可以...

浮躁的码农
41分钟前
0
0
MakeCode图形化编程语言学习笔记:micro:bit编程练习题[图]

MakeCode图形化编程语言学习笔记:micro:bit编程练习题[图]: 基础训练题: Q1:摇晃micro:bit编程板,随机出现7个小动物图标中的一个,并且前后相邻两次出现的小动物不重复。 注:七个小动物...

原创小博客
41分钟前
0
0
Redis 压力测试说明

Redis 压力测试说明 redis压力测试 2014-03-24 21:41:07| 分类: 默认分类 | 标签:redis |举报|字号 订阅 这几天对比测试mongodb、redis、pg的性能,主要是在消息队列、消息处理、用户经纬度...

舒文joven
41分钟前
0
0
拉姆达表达式 追加 条件判断 Expression>

public static class PredicateBuilder {   /// <summary>   /// 机关函数应用True时:单个AND有效,多个AND有效;单个OR无效,多个OR无效;混应时写在AND后的OR有效   /// </summary...

Lytf
54分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部