最近需要在app中加入夜间模式,本来以为是类似于网易云音乐那种更换暗色皮肤的功能,结果领导说,只是降低一下页面亮度就好了(哈哈哈哈嗝),so,本来考虑用降低系统亮度的方法,结果该方法需要用到WRIT_SETTING权限,并且该权限还属于特殊权限,上架应用市场的时候会被检测到,所以换个思路,就是用了降低页面透明度的方法,效果类似于页面上盖了一层半透明的黑色view,代码如下:
/**
* 设置添加屏幕的背景透明度
*
* @param bgAlpha 屏幕透明度0.0-1.0 1表示完全不透明
*/
public void setBackgroundAlpha(float bgAlpha) {
WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.alpha = bgAlpha;
if (bgAlpha == 1) {
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);//不移除 该Flag的话,在有视频的页面上的视频会出现黑屏的bug
} else {
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);//此行代码主要是解决在华为手机上半透明效果无效的bug
}
this.getWindow().setAttributes(lp);
}
然后在各个页面oncreate和onresume回调里根据全局变量判断,进行透明度变更,本来以为已经完成任务了,结果第二天客户提出问题,app内的视频播放没有画面,经过一番倒腾,在activity主题中添加以下代码解决问题:
<item name="android:windowBackground">@android:color/transparent</item>
具体原因还未想清楚,有知道的大佬烦请告知,多谢