从业阶段,慢慢补全 ~
Android 8.0
Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
该错误来源于umeng的错误收集
-
umeng错误频率,发生142次,影响36位用户 (我自身的测试机无法复现问题)
-
错误详情
-
错误原因
只支持不透明的全屏activity自主设置界面方向,反之如果该全屏activity是透明状态的情况下,你设置了屏幕方向则会报错 -
AndroidManifest 场景
<activity
android:name=".activity.MyActivity"
android:configChanges="screenSize|keyboardHidden|orientation"
android:label="我的页面"
android:screenOrientation="portrait"
android:theme="@style/APPTheme"
/>
- 解决方式
方法 1
虽然这种方法可以解决问题,但是大多时候我们还是需要当前Activity保持垂直的状态
删除AndroidManifest.xml中相应Activity的 android:screenOrientation=""属性
方法 2
1> 去掉AndroidManifes.xml里面的"android:screenOrientation="portrait"属性
2> 在自己的BaseActivity的onCreate中加上setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
方法 3
在保持垂直属性的同时,设置可满足我们需求的theme
在theme的内部属性中查看是否有android:windowIsTranslucent属性 , 如拥有的话,可删除,或者设置为 false
正式结果 - FitTheme为我们下方新增style
<activity
android:name=".activity.MyActivity"
android:configChanges="screenSize|keyboardHidden|orientation"
android:label="我的页面"
android:screenOrientation="portrait"
android:theme="@style/FitTheme"
/>
在res → values 下新建 styles.xml (如已有可直接添加style,如不存在则需要values-26新建styles.xml ),添加以下配置
<resources>
<style name="FitTheme" parent="AppTheme">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<!--用背景图消除启动白屏-->
<item name="android:windowIsTranslucent">false</item>
</style>
</resources>
如上述设置无效,那么可以用到我项目中部分设置,因为我的FitTheme继承自MyTheme
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="toolbarStyle">@style/ClubToolbar</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowDisablePreview">true</item>
</style>
<style name="ClubToolbar" parent="Widget.AppCompat.Toolbar">
<!-- 设置该属性解决空白部分-->
<item name="contentInsetStart">0dp</item>
</style>