簡體   English   中英

根據屏幕大小在Android中強制縱向或橫向模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM