天天看點

Android 8.0 Only fullscreen activities can request orientation解決方法

原文:Android 8.0 Only fullscreen activities can request orientation解決方法 | Stars-One的雜貨小窩

公司的項目坑太多,現在适配高版本的出現了上面的這個問題..
個人項目中我一般不對這個Activity朝向orientation屬性進行更改
出現這個問題的原因是Android8.0的限制,隻有全屏(fullscreen)的Activity才能去設定橫/豎屏的方向,是以解決方法從下面幾個方向入手

分析

從版本入手,降低版本,低版本沒有這個限制

從Activity方向入手,取消設定橫/豎屏(也就是AndroidMainfest中删除Activity的orientation的屬性),或者是将Activity設定為全屏的

那麼怎麼知道Activity是不是屬于全屏的,由下面的屬性可以判斷(定義在style檔案裡)

1.“windowIsTranslucent”為true;

2.“windowIsTranslucent”為false,但“windowSwipeToDismiss”為true;

3.“windowIsFloating“為true;

符合上面的某點規則的,說明Activity不是fullScreen

我們按照上面的規則,在styles.xml檔案中定義好主題,之後給Activity設定即可

上面說的,可能項目的Activity過多,不好更改,還可以使用代碼的方式,将Activity的orientation屬性還原為預設值

SCREEN_ORIENTATION_UNSPECIFIED

(通過反射)

還有一點可以考慮,就是讓非全屏的Activity的orientation屬性設定

behind

,讓它跟随上個Activity保持相同的螢幕方向即可

基于以上的分析,總結得出下面幾種解決方法

解決方法

修改targetSdk版本

将build.gradle裡的targetSdk修改為26以下(包含26)

Android 8.0 Only fullscreen activities can request orientation解決方法

設定Activity為全屏

通過定義style.xml屬性,将Activity設定為全屏即可

符合上面的某點規則的,說明Activity不是fullScreen,按照上面的定義,反向設定即可,如

<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
	<item name="windowActionBar">false</item>
	<item name="windowNoTitle">true</item>
	<item name="windowIsTranslucent">false</item>
	<item name="windowSwipeToDismiss">false</item>
</style>
           

然後在AndroidManiFest.xml檔案中,給Activity設定style屬性,如

<activity
	android:name="com.tjsoft.advice.ui.More"
	android:screenOrientation="landscape"
	android:theme="@style/AppTheme" />
           

通過反射重置orientation

具體參考Only fullscreen activities can request orientation終極解決方法_LiteHeaven的專欄-CSDN部落格,本人未測試過

設定orientation為behind

這種方法是将非fullscreen的Activity的orientation設定為behind,讓其螢幕方向和上個Activity相同,這樣就不會出現問題了

删除Activity設定的orientation屬性

這個是終極大法,就是不給Activity設定orientation,那麼就不會出現問題啦

參考

  • Only fullscreen activities can request orientation?一個搞笑的坑! - 知乎
  • Only fullscreen activities can request orientation終極解決方法_LiteHeaven的專欄-CSDN部落格

提問之前,請先看提問須知

點選右側圖示發起提問

Android 8.0 Only fullscreen activities can request orientation解決方法

或者加入QQ群一起學習

Android 8.0 Only fullscreen activities can request orientation解決方法

TornadoFx學習交流群:1071184701

Android 8.0 Only fullscreen activities can request orientation解決方法

繼續閱讀