Android 開發中禁止螢幕旋轉
我們通常有兩種方案
- 方案一
在
AndroidManifest.xml
中設定activity
中的android:screenOrientation
屬性值 - 方案二
在
Activity
中呼叫setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
他們各自都存在些小問題:
方案一中,需要為清單檔案每個activity
手動新增屬性,每次增加新的activity
都需要重新設定,如果是元件化的情況簡直就是災難,更不要說特定的android:screenOrientation
的activity
了。
在application
中的theme
似乎可以設定整個application
的android:screenOrientation
但是實驗結果是沒有效果。
方案二中,似乎很完美,只需要在BaseActivity
中寫一行程式碼就好了。但是它有一個嚴重的問題就是:
當activity
切換時,上一個activity
如果是橫屏狀態,此時切換對應的Activity
它會首先是橫屏狀態,然後自動切換為豎直的情況。引出的額外問題不做延伸,僅僅是 UI 效果也不能太讓人滿意,我發現微信 android 端也有這個情況。(在朋友圈點選檢視大圖,橫屏後在橫屏狀態返回,此時朋友圈介面會進行一次上面描述的旋轉)
所以,如果評審不能通過,那麼方案二就不能使用。
那麼有什麼辦法可以統一處理呢?
也有兩個方法
-
一是修改類似
ActivityThread#handleLaunchActivity()
中ActivityClientRecord
或者其他對應方法中的ActivityInfo
具體需要檢視系統啟動的原始碼。 這似乎有點超出我目前的能力範圍了。 -
二就是很簡單的在打包過程中修改
AndroidManifest.xml
直接為沒有設定過android:screenOrientation
的activity
新增上一個預設的值了。
方案二的話顯然簡單的多。這裡有我的一個實現方案,有興趣的朋友可以過目一下。