最初是在升级了
targetSdkVersion = 28
之后,屏幕方向锁定 + 不为全屏 + targetSdkVersion>26 = 在8.0的手机报Only fullscreen opaque activities can request orientation的错后直接崩溃,其他android版本则不会报。
<activity
...
android:screenOrientation="portrait"
android:theme="@style/AnimStartStyle">
</activity>
<style name="AnimStartStyle" parent="Theme.AppCompat.Light.NoActionBar.FullScreen">
<item name="android:windowAnimationStyle">@style/AnimFade</item>
<item name="android:windowIsTranslucent">true</item>
</style>
原因是睿智的谷歌工程师改了段睿智的代码,总的来说,就是targetSdkVersion >= 26,设置了screenOrientation,且设置了windowIsTranslucent或windowSwipeToDismiss或windowIsFloating为true的,直接抛
throw new IllegalStateException("Only fullscreen opaque activities can request orientation");
着实睿智。8.1的源码修复了这段。 奇怪的是,我在设置了targetSdkVersion = 26时,三星s7 8.0.0系统没挂,>=27才开始挂。
修复方法
- 设置targetSdkVersion < 26,治标不治本;
- 去掉windowIsTranslucent或windowSwipeToDismiss或windowIsFloating = true的设置,因噎废食;
- (推荐)去掉AndroidManifest里的screenOrientation的设置,改为在Activity中加上:
if (Build.VERSION.SDK_INT != Build.VERSION_CODES.O) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
转载自解决 Only fullscreen opaque activities can request orientation