Android進階之路 - 各版本的兼容問題

從業階段,慢慢補全 ~

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章