Android中为PopupWindow设置半透明背景的方案(兼容华为手机)
2016-05-17 19:38
627 查看
android中为PopupWindow设置半透明背景已经是老生常谈的问题了,网上一搜答案也都基本相同,最简单的就是获取窗体的属性,给其设置透明度:
此方法在绝大多数手机上都是有效的,但是如果你碰到的是华为手机,那么不好意思,只设置这几行代码是无效的(暂未找到原因)。其实要想兼容华为手机也很简单,只需要多加几行代码就行了:
当然,对窗体设置了透明度之后一定要记得在PopupWindow消失的时候将透明度设置回来:
单从编译角度来说,我就没有编译过去,不知道他们是怎样实现的。
/** * 设置页面的透明度 * @param bgAlpha 1表示不透明 */ public static void setBackgroundAlpha(Activity activity, float bgAlpha) { WindowManager.LayoutParams lp = activity.getWindow().getAttributes(); lp.alpha = bgAlpha; activity.getWindow().setAttributes(lp); }
此方法在绝大多数手机上都是有效的,但是如果你碰到的是华为手机,那么不好意思,只设置这几行代码是无效的(暂未找到原因)。其实要想兼容华为手机也很简单,只需要多加几行代码就行了:
/** * 设置页面的透明度 * @param bgAlpha 1表示不透明 */ public static void setBackgroundAlpha(Activity activity, float bgAlpha) { WindowManager.LayoutParams lp = activity.getWindow().getAttributes(); lp.alpha = bgAlpha; if (bgAlpha == 1) { activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);//不移除该Flag的话,在有视频的页面上的视频会出现黑屏的bug } else { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);//此行代码主要是解决在华为手机上半透明效果无效的bug } activity.getWindow().setAttributes(lp); }
当然,对窗体设置了透明度之后一定要记得在PopupWindow消失的时候将透明度设置回来:
<span style="white-space:pre"> </span>@Override public void onDismiss() { if (activity != null) { setBackgroundAlpha(activity, 1f); } }或
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { if (activity != null) { setBackgroundAlpha(activity, 1f); } } });当然,还有其他方法可以实现半透明效果,比如,设置PopupWindow为全屏,自己添加半透明的背景等,但是针对网上说的如下设置:
ColorDrawable dw = new ColorDrawable(-00000); popupWindow.setBackgroundDrawable(dw);
单从编译角度来说,我就没有编译过去,不知道他们是怎样实现的。
相关文章推荐
- Android 开发资源
- Android并发编程之AsyncTask
- android代码中设置EditText的hint字体大小而不改变EditText的文字大小
- Android里的多线程知识点
- android自定义View,实现折线图(一)
- android 开机动画的制作
- android之调用电话拨打电话
- Android之工程出现红色感叹号
- Android activity跳转到另一个activity的指定fragment页面
- RxJava 和 RxAndroid 二(操作符的使用)
- Android App中用Handler实现ViewPager页面的自动切换
- Android Studio如何设置代码自动提示
- [Android] 在Ubuntu 12.04 (64bit)上使用搭建Android的调试环境:ADB USB Connection By root
- 玩转Android studio 插件开发、测试、JCenter库发布(4)
- Android 点9图片
- Android AndroidStudio JSR/RET are not supported with computeFrames option
- 如何把android studio用github实现团队协作
- [Android]NDK开发环境配置与JNI开发
- Android Studio使用Lambda表达式出错
- android调用webservice解析Gson数据