Android中解决华为手机设置PopupWindow半透明背景无效果问题

时间:2021-10-24 17:12:15

Android中为PopupWindow设置半透明背景是很常见的,最简单的就是获取窗体的属性,给其设置透明度:

    /** 
* 设置页面的透明度
* @param alpha 1表示不透明
*/

private void setWindowAlpha(float alpha) {
if (alpha < 0 || alpha > 1) return;
WindowManager.LayoutParams windowLP = getWindow().getAttributes();
windowLP.alpha = alpha;
getWindow().setAttributes(windowLP);
}

此方法在绝大多数手机上都是可以的,但是如果是华为手机就不行(暂未找到原因)。要想兼容华为手机,只需要多加几行代码:

    private void setWindowAlpha(float alpha) {
if (alpha < 0 || alpha > 1) return;
WindowManager.LayoutParams windowLP = getWindow().getAttributes();
windowLP.alpha = alpha;
if (alpha == 1) {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);//不移除该Flag的话,在有视频的页面上的视频会出现黑屏的bug
} else {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);//此行代码主要是解决在华为手机上半透明效果无效的bug
}
getWindow().setAttributes(windowLP);
}

设置了透明度之后还要在PopupWindow消失的时候将透明度设置回来:

pw.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
setWindowAlpha(1f);
}
});