大家想必对PopupWindow不会很陌生吧,我们在开发中经常会遇到要求使其背景半透明的需求,但网上的很多解决方案只能是在大部分机型上满足要求,像华为这样的机型就会发现我们原来设置的背景变暗效果的代码并没有起效果。

这里我贴出最终的兼容方案:

View contentView;

LayoutInflater mLayoutInflater = LayoutInflater.from(activity);

contentView = mLayoutInflater.inflate(R.layout.layout_popupwindow,

null);

pop = new PopupWindow(contentView,

ViewGroup.LayoutParams.MATCH_PARENT, (int) context.getResources().getDimension(R.dimen.y568));

TextView tvTitle = (TextView) contentView.findViewById(R.id.text);

tvTitle.setText(strTitle);

ListView listView = (ListView) contentView.findViewById(R.id.list);

// 产生背景变暗效果

WindowManager.LayoutParams lp = activity.getWindow()

.getAttributes();

lp.alpha = 0.4f;

activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

activity.getWindow().setAttributes(lp);

pop.setTouchable(true);

pop.setFocusable(true);

pop.setBackgroundDrawable(new BitmapDrawable());

pop.setOutsideTouchable(true);

pop.showAtLocation(contentView, Gravity.BOTTOM, 0, 0);

pop.update();

pop.setOnDismissListener(new PopupWindow.OnDismissListener() {

// 在dismiss中恢复透明度

public void onDismiss() {

WindowManager.LayoutParams lp = activity.getWindow()

.getAttributes();

lp.alpha = 1f;

activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

activity.getWindow().setAttributes(lp);

}

});

listView.setOnItemClickListener(onItemClickListener);

listView.setAdapter(adapter);

注:特别是下面几行代码

// 产生背景变暗效果

WindowManager.LayoutParams lp = activity.getWindow()

.getAttributes();

lp.alpha = 0.4f;

activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

activity.getWindow().setAttributes(lp);

pop.setTouchable(true);

pop.setFocusable(true);

pop.setBackgroundDrawable(new BitmapDrawable());

pop.setOutsideTouchable(true);

pop.showAtLocation(contentView, Gravity.BOTTOM, 0, 0);

pop.update();

pop.setOnDismissListener(new PopupWindow.OnDismissListener() {

// 在dismiss中恢复透明度

public void onDismiss() {

WindowManager.LayoutParams lp = activity.getWindow()

.getAttributes();

lp.alpha = 1f;

activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

activity.getWindow().setAttributes(lp);

}

});

网上很多方案都要求加下面这两行代码,但其实加上反而会影响华为这种机型的显示效果

ColorDrawable dw = new ColorDrawable(-00000);

popupWindow.setBackgroundDrawable(dw);

android popupwindow 自定义背景,Android PopupWindow背景半透明兼容方案相关推荐

  1. android如何自定义dialog,Android—自定义Dialog

    在 Android 日常的开发中,Dialog 使用是比较广泛的.无论是提示一个提示语,还是确认信息,还是有一定交互的(弹出验证码,输入账号密码登录等等)对话框. 而我们去看一下原生的对话框,虽然随着 ...

  2. android 自定义皮肤,Android Studio 自定义皮肤主题和背景

    新的一年,新的开始,在这里先祝福大家在新的一年收获多多,多升职,多加薪,代码没BUG. 第一 Android Studio自定义皮肤主题-ColorThemes 寒假期间有人问我, "你代码 ...

  3. android spinner,自定义字体大小颜色背景位置

    spinner下拉框控件用来从一组数据中选择一项数据.最简单的就是使用系统自带的样式.如果想改变选中条目和下拉框条目中内容的字体大小,颜色,背景,以及下拉框的显示位置,这就需要自定义. 看效果 第1个 ...

  4. android studio 皮肤,Android Studio 自定义皮肤主题和背景

    Android Studio自定义皮肤主题-ColorThemes 最近有人问我, "你代码这是用的什么字体? 看着好舒服", 其实这是用了自定义皮肤主题包,主题包下载网站 htt ...

  5. android中自定义 toast,android 自定义Toast样式和显示方式

    问题: 1.android 开发中如果不停的触发显示Toast,会造成Toast一个接一个的弹出,非常影响用户体验. 2.android设备有千万个,每个设备的Toast的背景有可能不一样,造成在应用 ...

  6. android开发自定义键盘,Android 总结:自定义键盘实现原理和三种实例详解

    1.实现原理 实现软键盘主要用到了系统的两个类 Keyboard 和 KeyboardView .html 1. Keyboard 用于监听虚拟键盘:java Loads an XML descrip ...

  7. android dialog 自定义布局,Android自定义Dialog实现加载对话框效果

    前言 最近开发中用到许多对话框,之前都是在外面的代码中创建AlertDialog并设置自定义布局实现常见的对话框,诸如更新提示等含有取消和删除两个按钮的对话框我们可以通过代码创建一个AlertDial ...

  8. android popupmenu 自定义样式,Android:自己定义PopupMenu的样式(显示图标/设置RadioButton图标)...

    PopupMenu是Android中一个十分轻量级的组件.与PopupWindow相比,PopupMenu的可自己定义的能力较小,但使用更加方便. 先上效果图: 本例要实现的功能例如以下: 1.强制显 ...

  9. android sqlite自定义函数,Android中自定义一个View的方法详解

    本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...

最新文章

  1. iOS progressive Web App (PWA) 技术
  2. 国家航天局:中国空间站预计到2022年前后建成
  3. ##(两个井号)和#(一个井号)都是什么意思C and C++ 2008-09-23 21:18:27 阅读1106 评论0 字号:大中小 订阅 .
  4. 数据连接java面试题
  5. 消息 245,级别 16,状态 1,第 1 行 在将 varchar 值 '2,8' 转换成数据类型 int 时失败。...
  6. 读取exchange邮件的未读数(转载)
  7. 什么是Scale Up和Scale Out?
  8. C语言丨小 学 数 学(二):高精度乘法
  9. Android布局之屏幕自适应
  10. Python web爬虫
  11. 30道Linux面试题
  12. ELF文件和BIN文件 uboot.elf uboot.bin
  13. 张小龙:微信产品观(下)
  14. 台式计算机声音输出方式在哪里,电脑声音无法找到输出设备怎么办?
  15. form表单钩子,局部钩子和全局钩子
  16. 华为P50/P50Pro怎么解锁huawei P50pro屏幕锁开机锁激活设备锁了应该如何强制解除鸿蒙系统刷机解锁方法流程步骤不开机跳过锁屏移除锁定进系统方法经验
  17. NLP工具——Stanza依存关系含义详解
  18. UML需求分析步骤实例解析
  19. NMAKE参考之二——运行NMAKE
  20. ubuntu服务器登桌面,Ubuntu Server安装桌面环境实现图形化访问 | 聂扬帆博客

热门文章

  1. metasploit 快速入门(三) 服务端漏洞利用
  2. golang channel错误 send to non-chan type int/string
  3. shellcode中动态定位API
  4. NT式驱动和WDM式驱动程序
  5. 陈老师Linux内核概述导学
  6. Linux 系统调用(一)
  7. hue sqoop mysql_HUE中Oozie执行Sqoop
  8. 内核aio_AIO 的主要内核参数 | 学步园
  9. android富文本图片自适应,Android Span富文本图文混排 - ImageSpan(图文垂直居中)...
  10. 虚拟机克隆_了解Java中的可克隆接口