Android进阶之路 - 各版本的兼容问题

从业阶段,慢慢补全 ~

      • Android 8.0
        • Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation

Android 8.0

Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation

该错误来源于umeng的错误收集

  • umeng错误频率,发生142次,影响36位用户 (我自身的测试机无法复现问题)
    Android进阶之路 - 各版本的兼容问题_第1张图片

  • 错误详情
    Android进阶之路 - 各版本的兼容问题_第2张图片

  • 错误原因
    只支持不透明的全屏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>

你可能感兴趣的:(Android进阶之路)