1. 遇到的问题描述
在启动界面使用EasyPermissions,这个界面有用到权限的申请,但是第一次拒绝权限后(未勾选不再提醒),下次再发起权限请求时,EasyPermissions的询问弹窗出现占满屏幕且背景颜色异常的迷一样的问题。但是在其他界面发起权限请求并不会出现这个问题。
2. 出现的问题效果图片
3. 问题分析和解决
一开始并没有去查看其他界面的弹窗效果,一直以为是EasyPermissions使用的问题,去issue找了半天没找到问题,百度也没有结果。自己源码翻了半天,没招,就去看了下其他界面的的权限请求弹窗效果,结果是正常的。
只有启动界面出现问题,那就好办了,查看了下启动界面的代码和主题,弹窗出现全屏显示,应该是被activity的主题影响了。
启动页设置的样式
<style name="SplashStyle" parent="AppTheme"
<item name="android:windowNoTitle"true</item
<item name="android:windowFullscreen"true</item
<item name="android:background"@drawable/splash</item
</style
排除一下发现下面这句话的锅
<item name="android:background"@drawable/splash</item
这边为了优化启动的视觉效果,给app启动页预先设置背景,莫名的挖了个坑。
4. 解决方法
既然是主题样式的问题,那么解决方法就简单了,给EasyPermissions的弹窗单独设置主题
<?xml version="1.0" encoding="utf-8"?
<resources
<style name="EasyPermissions_theme"
<item name="android:layout_width"wrap_content</item
<item name="android:layout_height"wrap_content</item
<item name="android:windowIsFloating"true</item
<item name="android:backgroundDimEnabled"false</item
<item name="android:background"@null</item
</style
</resources
发起请求的代码
// EasyPermissions.requestPermissions(getCurActivity(), rationale, requestCode, perms);
EasyPermissions.requestPermissions(
new PermissionRequest.Builder(getCurActivity(), requestCode, perms)
.setRationale(rationale)
.setPositiveButtonText("确定")
.setNegativeButtonText("取消")
.setTheme(R.style.EasyPermissions_theme)
.build());
}