Wie sperre ich die Ausrichtung der Android App auf Hochformat in Handys und Querformat in Tablets?

81

Ich entwickle eine Android-App, deren Ausrichtung ich nicht in den Querformatmodus ändern möchte, wenn der Benutzer das Gerät dreht. Außerdem möchte ich, dass die gesperrte Ausrichtung auf Telefonen im Hochformat und auf Tablets im Querformat angezeigt wird. Kann dies erreicht werden, wenn ja wie? Vielen Dank.

Ankit Rawat
quelle
2
@CommonsWare: Meine App verfügt über Menüs mit langen Listen, die im Potrait-Modus auf Telefonen viel effizienter durchlaufen werden.
Ankit Rawat
3
Überlegen Sie sich dann ein besseres GUI-Design, das die Fähigkeit Ihrer Benutzer berücksichtigt, ihre Geräte in jeder beliebigen Ausrichtung zu verwenden.
CommonsWare

Antworten:

155

Sie müssen nur die Eigenschaft unten im Aktivitätselement in Ihrer AndroidManifest.xmlDatei definieren. Dadurch wird Ihre Ausrichtung auf das Hochformat beschränkt.

android: screenOrientation = "Porträt"

Beispiel:

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

Zusätzlich können Sie gemäß Eduard Lucas Kommentar unten auch verwenden, screenOrientation="sensorPortrait"wenn Sie die Drehung um 180 Grad aktivieren möchten.

Robin Hood
quelle
21
Oder sensorPortraitwenn Sie möchten, dass der Benutzer den Bildschirm um 180 Grad drehen kann :)
Eduard Luca
44

Sie müssen die android:screenOrientation="portrait"Direktive in Ihre hinzufügen AndroidManifest.xml. Dies ist in Ihrem <activity>Tag zu tun .

Darüber hinaus heißt es im Android-Entwicklerhandbuch:

[...] Sie sollten auch ausdrücklich erklären, dass Ihre Anwendung entweder Hoch- oder Querformat mit dem Element erfordert. Zum Beispiel <uses-feature android:name="android.hardware.screen.portrait" />.

Halim Qarroum
quelle
6
+1 für das Good Practice Zitat und weil dies die akzeptierte Antwort sein sollte, da es korrekt ist und zuerst veröffentlicht wurde ...
Eduard Luca
7
Gibt es einen globalen Weg?
Tyler Pfaff
21

Ich kann sehen, dass Sie eine Antwort akzeptiert haben, die Ihr Problem nicht vollständig löst:

android:screenOrientation="portrait" 

Dadurch wird Ihre App sowohl auf Telefonen als auch auf Tablets im Hochformat angezeigt.

Sie können die App mithilfe von in die "bevorzugte" Ausrichtung des Geräts zwingen

android:screenOrientation="nosensor"

Dies führt dazu, dass Ihre App auf den meisten Telefonen des Telefons im Hochformat und auf Tablets im Querformat angezeigt wird. Es gibt viele Telefone mit Tastaturen, die für den Querformatmodus entwickelt wurden. Wenn Sie Ihre App zum Hochformat zwingen, kann sie auf solchen Geräten fast unbrauchbar werden. Android migriert kürzlich auch auf andere Gerätetypen. Lassen Sie das Gerät am besten die bevorzugte Ausrichtung auswählen.

Radu Simionescu
quelle
Für diejenigen, die neugierig auf die Einstellung "Nosensor" sind, lesen Sie mehr in den offiziellen Dokumenten unter developer.android.com/guide/topics/manifest/activity-element
James Jordan Taylor
11

Es kann sein, dass Sie programmgesteuert feststellen müssen, ob es sich um ein Tablet oder ein Telefon handelt. Überprüfen Sie zunächst, ob es sich bei dem Gerät um ein Telefon oder ein Tablet handelt

Bestimmen Sie, ob das Gerät ein Smartphone oder Tablet ist?

Tablet oder Telefon - Android

Dann......

if(isTablet)
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);      
}else
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Bhavesh Hirpara
quelle
Hallo @ Bhavesh, es funktioniert nicht für Android 9 Mobile.
Manikandan K
Wie können wir feststellen, ob es sich um eine Tablette handelt? Das haben Sie nicht erklärt.
Abdul Wahid
Sie können die bearbeitete Antwort sehen. Ich habe angegeben, wie Sie feststellen können, ob es sich bei dem Gerät um ein Smartphone oder Tablet handelt.
Bhavesh Hirpara
3
<activity android:name=".yourActivity"
          android:screenOrientation="portrait" ... />

zur Hauptaktivität hinzufügen und hinzufügen

android:configChanges="keyboardHidden"

um zu verhindern, dass Ihr Programm den Modus ändert, wenn die Tastatur aufgerufen wird.

Sumodh S.
quelle
1

Stellen Sie die Bildschirmausrichtung in der Manifest-Datei unter dem Aktivitäts-Tag auf Hochformat ein.

Ravish Kumar
quelle
0
android:screenOrientation="locked"

in <application>für alle App in <activity>für die tatsächliche Aktivität

Anton Shikhert
quelle
0

Stellen Sie die Bildschirmausrichtung in der Manifest-Datei unter dem Aktivitäts-Tag auf Hochformat ein.

Hier das Beispiel

Sie müssen an jeder Aktivität teilnehmen

Fügen Sie die folgenden Zeilen in Aktivität hinzu

für Porträt

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

für die Landschaft

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

Hier das Beispiel für 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>

Chetan
quelle
-1

Einfach hinzufügen:

android:screenOrientation="portrait"

in " AndroidManifest.xml ":

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