报这个错误时,说实话我是懵逼状态的,完全不知道咋回事。明明所有手机好使,就华为的手机,微信第三方登录报错。通过网上搜索查找,算是大概了解了下,罪魁祸首竟然是Android8.0适配问题。
在Android8.0环境下,如果一个Activity在Manifest中设置了方向(横,竖屏),即android:screenOrientation=”landscape”/”portrait”,并且指定的android:theme中使用的style带有透明属性
<item name="android:windowIsTranslucent">true</item>
那么在启动该Activity的时候在onCreate()中就会抛出异常
java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
字面意思就是说:只有不透明的全屏activity可以自主设置界面方向。
网上搜了搜,发现不是个例,这个问题出现在android8.0以上。原因是我们给Activity同时设置了 android:screenOrientation="" 和 <item name="android:windowIsTranslucent">true</item>。
通过了解,有两种解决方案:
1,删除AndroidManifest中相应Activity的 android:screenOrientation=""属性;
2,删除相应Activity的theme中<item name="android:windowIsTranslucent">true</item>属性。 二选一。
若两种效果都需要,只能另辟蹊径了。
在values-v26目录下,新建styles.xml做一个适配,估计不就这个问题就会得到解决。
<resources>
<style name="FullScreen" parent="AppTheme">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<!-- 适配android手机系统8.0(api26),Only fullscreen opaque activities can request orientation -->
<!--用背景图消除启动白屏-->
<item name="android:windowIsTranslucent">false</item>
</style>
</resources>
记录每次崩溃。愿对需要的人有所帮助。
网友评论