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消失的时候将透明度设置回来:
@Overridepublic void onDismiss() {if (activity != null) {setBackgroundAlpha(activity, 1f);}}

popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {if (activity != null) {setBackgroundAlpha(activity, 1f);}}});
    当然,还有其他方法可以实现半透明效果,比如,设置PopupWindow为全屏,自己添加半透明的背景等,但是针对网上说的如下设置:

ColorDrawable dw = new ColorDrawable(-00000);popupWindow.setBackgroundDrawable(dw);

单从编译角度来说,我就没有编译过去,不知道他们是怎样实现的。


更多相关文章

  1. Android之日期时间选择器使用方法
  2. mtk android 背光设置
  3. Android客户端上传文件到服务器端
  4. android发送QQ邮件(带附件)
  5. Android的webView应用与js互调app混合开发用例
  6. 【知识点】android代码中设置margin
  7. Android(安卓)将activity设置成对话框样式
  8. android有用的知识
  9. 【android】解决设置ImageView的scaletype为centerCrop后padding

随机推荐

  1. [置顶] Android(安卓)位于底部的Tab
  2. android操作sim卡联系人信息
  3. android 的相对布局的使用小记
  4. Android(安卓)中 OnTouch事件的研究
  5. android另一种访问包资源方式
  6. [入门三]Android应用开发入门五问
  7. android app的类响应式设计【半月谈投稿
  8. android 动画Animation属性大全(-)
  9. Android(安卓)4.3源码的下载和编译环境的
  10. Android(安卓)RecyclerView 实现瀑布流交