本文共 1156 字,大约阅读时间需要 3 分钟。
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); } });
转载地址:http://ozsni.baihongyu.com/