Android 禁止螢幕旋轉

pdog發表於2018-10-08

Android 開發中禁止螢幕旋轉

我們通常有兩種方案

  • 方案一 在AndroidManifest.xml 中設定activity 中的android:screenOrientation 屬性值
  • 方案二 在Activity 中呼叫setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

他們各自都存在些小問題:

方案一中,需要為清單檔案每個activity手動新增屬性,每次增加新的activity 都需要重新設定,如果是元件化的情況簡直就是災難,更不要說特定的android:screenOrientationactivity了。 在application中的theme似乎可以設定整個applicationandroid:screenOrientation 但是實驗結果是沒有效果。

方案二中,似乎很完美,只需要在BaseActivity 中寫一行程式碼就好了。但是它有一個嚴重的問題就是: 當activity 切換時,上一個activity 如果是橫屏狀態,此時切換對應的Activity 它會首先是橫屏狀態,然後自動切換為豎直的情況。引出的額外問題不做延伸,僅僅是 UI 效果也不能太讓人滿意,我發現微信 android 端也有這個情況。(在朋友圈點選檢視大圖,橫屏後在橫屏狀態返回,此時朋友圈介面會進行一次上面描述的旋轉)

所以,如果評審不能通過,那麼方案二就不能使用。

那麼有什麼辦法可以統一處理呢?

也有兩個方法

  • 一是修改類似ActivityThread#handleLaunchActivity()ActivityClientRecord 或者其他對應方法中的ActivityInfo具體需要檢視系統啟動的原始碼。 這似乎有點超出我目前的能力範圍了。

  • 二就是很簡單的在打包過程中修改AndroidManifest.xml直接為沒有設定過android:screenOrientationactivity 新增上一個預設的值了。

方案二的話顯然簡單的多。這裡有我的一個實現方案,有興趣的朋友可以過目一下。

pdog github :default-manifest-attributes

相關文章