您的位置:首页 > 移动开发 > Android开发

Android中为PopupWindow设置半透明背景的方案(兼容华为手机)

2016-05-17 19:38 627 查看
android中为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);


单从编译角度来说,我就没有编译过去,不知道他们是怎样实现的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: