簡體   English   中英

如何鎖定 Android 應用程序在手機中的縱向和平板電腦中的橫向?

[英]How to Lock Android App's Orientation to Portrait in Phones and Landscape in Tablets?

我正在開發一個 Android 應用程序,當用戶旋轉設備時,我不想將其方向更改為橫向模式。 另外,我希望鎖定方向在手機上為縱向模式,在平板電腦上為橫向模式。 這可以實現嗎,如果可以,如何實現? 謝謝。

您只需在AndroidManifest.xml文件的活動元素內定義以下屬性。 它會將您的方向限制為縱向。

機器人:屏幕方向=“肖像”

例子:

        <activity
            android:name="com.example.demo_spinner.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>

如果您希望這適用於整個應用程序,請在應用程序標簽內定義以下屬性,如下所示:

        <application>
         android:screenOrientation="sensorPortrait"
        </application>

此外,根據下面 Eduard Luca 的評論,如果您想啟用 180 度旋轉,您還可以使用screenOrientation="sensorPortrait"

您必須在AndroidManifest.xml添加android:screenOrientation="portrait"指令。 這將在您的<activity>標簽中完成。

此外,Android 開發者指南指出:

[...] 您還應該明確聲明您的應用程序需要元素的縱向或橫向。 例如, <uses-feature android:name="android.hardware.screen.portrait" />

我可以看到您已經接受了一個不能完全解決您的問題的答案:

android:screenOrientation="portrait" 

這將強制您的應用程序在手機和平​​板電腦上都是縱向的。

您可以使用以下命令強制應用程序處於設備的“首選”方向

android:screenOrientation="nosensor"

這將導致您的應用程序在大多數手機上強制為縱向,在平板電腦上為橫向。 有許多帶有鍵盤的電話專為橫向模式設計。 強制您的應用程序縱向可能會使其在此類設備上幾乎無法使用。 Android 最近也在遷移到其他類型的設備。 最好讓設備選擇首選方向。

可能是..你必須通過編程來識別它是平板電腦還是手機......首先檢查設備是手機還是平板電腦

確定設備是智能手機還是平板電腦?

平板電腦或手機 - Android

然后......

if(isTablet)
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);      
}else
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
<activity android:name=".yourActivity"
          android:screenOrientation="portrait" ... />

添加到主要活動並添加

android:configChanges="keyboardHidden"

防止您的程序在調用鍵盤時更改模式。

在活動標簽下的清單文件中將屏幕方向設置為縱向。

android:screenOrientation="locked"

<application>用於<activity>所有應用程序用於實際活動

在活動標簽下的清單文件中將屏幕方向設置為縱向。

這里的例子

您需要輸入每個活動

在活動中添加以下幾行

肖像

android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"

景觀用

android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity"

這里是 MainActivity 的例子

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="org.thcb.app">
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity"
            android:screenOrientation="portrait"
            tools:ignore="LockedOrientationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

<activity android:name=".MainActivity2"
            android:screenOrientation="landscape"
            tools:ignore="LockedOrientationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我想補充一下 Bhavesh 的答案。 問題是,如果用戶將手機保持在橫向模式並運行應用程序,它將首先將 go 切換到橫向模式,因為它基於清單中的傳感器,然后由於 onCreate 中的代碼而立即切換到手機中的縱向模式。 為了解決這個問題,下面的方法對我有用。

1 在活動清單中聲明鎖定方向android:screenOrientation="locked"

  <activity
        android:name=".overview.OverviewActivity"
        android:screenOrientation="locked" />

2 檢查活動或基本活動中的平板電腦或手機

override fun onCreate(savedInstanceState: Bundle?) {
    //check if the device is a tablet or a phone and set the orientation accordingly
    handleOrientationConfiguration()
    super.onCreate(savedInstanceState)
}

/**
 * This function has to be called before anything else in order to inform the system about
 * expected orientation configuration based on if it is a phone or a tablet
 */
private fun handleOrientationConfiguration() {
    requestedOrientation = if (UIUtils.isTablet(this).not()) {
        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
    } else {
        ActivityInfo.SCREEN_ORIENTATION_SENSOR
    }
}

UIUtils.kt

fun isTablet(context: Context): Boolean {
        return context.resources.configuration.smallestScreenWidthDp >= 600
    }

就是這樣,它將以鎖定模式啟動應用程序,這樣如果您在手機上,它將始終是縱向的,如果您在平板電腦上,它將根據設備的方向旋轉。 這樣,它將消除手機在開始時在橫向和縱向之間切換的問題。

在此處閱讀有關https://developer.android.com/guide/topics/manifest/activity-element下方鎖定模式的更多信息

Go 到 Manifest.xml 並在您喜歡鎖定方向的活動中添加以下代碼:

        android:screenOrientation="portrait"
        tools:ignore="LockedOrientationActivity"

您的代碼應如下所示:

  <activity
        android:name=".Activity.splash"
        android:screenOrientation="portrait"
        android:exported="true"
        tools:ignore="LockedOrientationActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

只需添加:

android:screenOrientation="portrait"

在“ AndroidManifest.xml ”中:

<activity
android:screenOrientation="portrait"
android:name=".MainActivity"
android:label="@string/app_name">
</activity>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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