Ich möchte, dass meine Android-Anwendung nur im Hochformat ausgeführt wird.

358

Ich möchte, dass meine Android-Anwendung nur im Hochformat ausgeführt wird. Wie kann ich das machen?

James
quelle

Antworten:

778

Legen Sie im Manifest Folgendes für alle Ihre Aktivitäten fest:

<activity android:name=".YourActivity"
    android:configChanges="orientation"
    android:screenOrientation="portrait"/>

Lassen Sie mich erklären:

  • Wenn android:configChanges="orientation"Sie Android mitteilen, dass Sie für die Änderungen der Ausrichtung verantwortlich sind.
  • android:screenOrientation="portrait" Sie legen den Standardausrichtungsmodus fest.
Cristian
quelle
50
Wäre nicht großartig, wenn wir eine "globale" Ausrichtung für ALLE Aktivitäten in der Anwendung festlegen könnten? Sieht so aus, als hätten wir keine andere Wahl, als das Attribut "Porträt" für jede Aktivität zu kopieren / einzufügen ...
Eduardo Coelho
63
Es ist genug zu setzenandroid:screenOrientation="portrait"
Bis zum
11
@EduardoCoelho Sie können tatsächlich eine Basisklasse PortraitActivityerstellen und in onCreate call setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)Alle Aktivitäten, die dies erweitern, drehen sich nicht
Twinone
1
@Twinone: Wie wäre es, wenn verschiedene Aktivitäten von verschiedenen Unterklassen von erben möchten, von denen sich Activityeine Aktivität erstreckt, ListActivitywährend andere sich einfach von erstrecken Activity?
RestInPeace
3
@ RestInPeace Ja, guter Punkt. Aber das ist nicht meine Idee, falsch zu sein, das ist nur Java, das keine Mehrfachvererbung unterstützt :)
Twinone
57

In Android Manifest - Datei, setzte Attribut für Ihre <activity>DASSandroid:screenOrientation="portrait"

Praveen
quelle
2
Lassen Sie mich hinzufügen: von Android Sudio 3.6 müssen android: screenOrientation = "fullSensor" oder android: screenOrientation = "unspecified" verwenden. fullSensor Bedeutet, dass Sie entweder die Option "Ausschalten" aktiviert haben oder nicht. Dadurch wird die Ausrichtung geändert, je nachdem, wie Sie das Telefon bewegen. nicht spezifiziert Bedeutet, wenn Sie die Option Drehen deaktiviert haben, bleibt sie nur in dieser Ausrichtung, und wenn nicht, ändert sie die Ausrichtung, je nachdem, wie Sie das Telefon bewegen.
Kirguduck
24

Es gibt zwei Möglichkeiten:

  1. Fügen Sie android:screenOrientation="portrait"für jede Aktivität in der Manifestdatei hinzu
  2. Fügen Sie this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);in jeder Java-Datei hinzu.
Android Code Lösung
quelle
14
Die zweite Option hat den schrecklichen Nebeneffekt, dass Ihre Aktivität neu gestartet wird, wenn sie in Portrait gestartet wird.
Joakim
4

im Manifest:

<activity android:name=".activity.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>

oder: in der MainActivity

@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Meysam Keshvari
quelle
Ich verstehe app/src/main/AndroidManifest.xml; lineNumber: 20; columnNumber: 50; The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bound.. Das Hinzufügen xmlns:tools="http://schemas.android.com/tools"des
Stammelements
3

Alter Beitrag, den ich kenne. Um Ihre App immer im Hochformat auszuführen, auch wenn die Ausrichtung geändert werden kann oder wird usw. (z. B. auf Tablets), habe ich diese Funktion entwickelt, mit der das Gerät in die richtige Ausrichtung gebracht wird, ohne dass Sie wissen müssen, wie das Hoch- und Querformat ist Funktionen sind auf dem Gerät organisiert.

   private void initActivityScreenOrientPortrait()
    {
        // Avoid screen rotations (use the manifests android:screenOrientation setting)
        // Set this to nosensor or potrait

        // Set window fullscreen
        this.activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        DisplayMetrics metrics = new DisplayMetrics();
        this.activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

         // Test if it is VISUAL in portrait mode by simply checking it's size
        boolean bIsVisualPortrait = ( metrics.heightPixels >= metrics.widthPixels ); 

        if( !bIsVisualPortrait )
        { 
            // Swap the orientation to match the VISUAL portrait mode
            if( this.activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT )
             { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
            else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ); }
        }
        else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); }

    }

Klappt wunderbar!

HINWEIS: Ändern Sie this.activitydurch Ihre Aktivität oder fügen Sie es der Hauptaktivität hinzu und entfernen Sie this.activity;-)

Codebeat
quelle
-5

ich benutze

 android:screenOrientation="nosensor"

Dies ist hilfreich, wenn Sie den Upside-Down-Portrait-Modus nicht unterstützen möchten.

user2305886
quelle
Wenn dies das tut, was ich denke, zwingt es den Bildschirm nicht wirklich zum Hochformat, was Sie vielleicht tun möchten.
Lassi Kinnunen
Warum entfernst du nicht einfach diesen Kommentar? es macht keinen Sinn
Alexander Zaldostanov
Fügen Sie in der Android Manifest-Datei einfach ein Attribut für Ihre <Aktivität> dieses Android hinzu: screenOrientation = "Porträt"
Avinash Shinde
Vielen Dank für Ihre Antwort, das ist hilfreich für mich.
Md. Shofiulla