報這個錯誤時,說實話我是懵逼狀態的,完全不知道咋回事。明明所有手機好使,就華為的手機,微信第三方登錄報錯。通過網上搜索查找,算是大概了解了下,罪魁禍首竟然是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>
記錄每次崩潰。愿對需要的人有所幫助。