[英]Force portrait or landscape mode in android depending on screen size
在過去的幾個小時中,我一直在進行一些研究,以及一些反復試驗,但是我無法找到針對此問題的完整解決方案。 我只是想強制我的android應用程序保持縱向模式,除非屏幕尺寸足夠大(平板電腦),否則將強制應用程序處於橫向模式。
到目前為止,我已經嘗試過:
<activity android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden">
以及:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
在我的onCreate和onResume中。
第一個示例確實可以工作,但是,如果是平板電腦,這將不允許我檢查屏幕尺寸並強制使用橫向模式。 此外,如果在執行異步任務時將手機保持在橫向模式,則在完成任務后,應用程序將進入橫向模式,然后只要我停留在手機上,我就可以再次在縱向和橫向之間切換同樣的活動。
因此,我不確定如何解決此問題的正確方法是? 如果我繼續第二個示例(使用更多代碼,我可以檢查屏幕尺寸,然后根據尺寸選擇布局)可以正常工作,只要我在活動中即可。 但是,如果在開始活動時將手機保持為橫向模式,則所有操作都會崩潰(因此,似乎代碼一開始就無效)。
任何可能在沒有任何“錯誤”的情況下完全起作用的建議(現在就是這種情況)將受到高度贊賞!
我意識到這已經很晚了,但是這是我的答案,以防萬一。
我走了程序化路線,在橫向或縱向位置啟動應用程序時都沒有遇到任何問題。
忽略清單選項。 如前所述,在onCreate()中使用setRequestedOrientation()。 檢查屏幕尺寸,例如:
private boolean screenIsLarge()
{
int screenMask = getResources().getConfiguration().screenLayout;
if ( ( screenMask & Configuration.SCREENLAYOUT_SIZE_MASK) ==
Configuration.SCREENLAYOUT_SIZE_LARGE) {
return true;
}
if ( (screenMask & Configuration.SCREENLAYOUT_SIZE_MASK) ==
Configuration.SCREENLAYOUT_SIZE_XLARGE) {
return true;
}
return false;
}
您可以修改它以包括Configuration
列出的其他屏幕尺寸。 根據此結果,您可以選擇是否將屏幕設置為橫向。
if( screenIsLarge() )
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.