奔溃报错:
java.lang.RuntimeException: Unable to start activity ComponentInfo{xxxx}: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation.
发生原理:
在targetsdkversion>=26的时候,Android 8.0 系统,如果设置了页面透明背景,再设置activity方向,就会引发此奔溃。bugtags 也验证了只有8.0.0系统会出现该bug。

发生背景:
需求要展示一个弹框效果。实际使用了activity,设置背景透明,以达到类似弹框效果。没结果没有注意设置了页面方向,导致了此问题。页面透明背景不能去除,那就要取消页面方向设置了。
透明style:
<style name="TransparentBgActivity" parent="AppTheme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
</style>
解决参考:
https://www.jianshu.com/p/e6b5e7261c25
解决办法:
step1:删除manifest 中申明activity时方向设置,比如:
android:screenOrientation="portrait";
step2:因为使用了BaseActivity,在base中设置portrait的页面方向,所以需要在对应的页面中,取消方向设置。
/**
* 这个activity为透明的,不允许再设置屏幕朝向
*/
override fun setPortraitScreen(): Boolean {
return false
}
网友评论