Wie deaktiviere ich den Querformatmodus in Android?

Antworten:

1632

Fügen Sie android:screenOrientation="portrait"der Aktivität in der Datei AndroidManifest.xml hinzu. Zum Beispiel:

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

EDIT: Da dies eine sehr beliebte Antwort geworden ist, fühle ich mich sehr schuldig, da das Erzwingen von Porträts selten die richtige Lösung für die Probleme ist, auf die es häufig angewendet wird.
Die wichtigsten Vorbehalte mit erzwungenem Porträt:

  • Dies entbindet Sie nicht davon, über Ereignisse im Aktivitätslebenszyklus nachdenken oder den Status ordnungsgemäß speichern / wiederherstellen zu müssen. Neben der App-Rotation gibt es viele Dinge, die eine Zerstörung / Wiederherstellung von Aktivitäten auslösen können, einschließlich unvermeidbarer Dinge wie Multitasking. Es gibt keine Verknüpfungen. lernen, mit Bündeln und retainInstanceFragmenten umzugehen.
  • Denken Sie daran, dass es im Gegensatz zum ziemlich einheitlichen iPhone-Erlebnis einige Geräte gibt, bei denen das Hochformat nicht die eindeutig beliebte Ausrichtung ist. Wenn Benutzer auf Geräte mit Hardware-Tastaturen oder Gamepads sind a la das Nvidia - Schild, auf Chromebooks , auf Falt- oder auf Samsung DeX , Portrait zwingen kann Ihre App - Erfahrung entweder begrenzen oder einen riesigen Usability Ärger machen. Wenn Ihre App kein starkes UX-Argument hat, das zu einer negativen Erfahrung bei der Unterstützung anderer Orientierungen führen würde, sollten Sie die Landschaft wahrscheinlich nicht erzwingen. Ich spreche von Dingen wie "Dies ist eine Registrierkassen-App für ein bestimmtes Tablet-Modell, das immer in einem festen Hardware-Dock verwendet wird."

Daher sollten die meisten Apps nur die Telefonsensoren, die Software und die physische Konfiguration selbst entscheiden lassen, wie der Benutzer mit Ihrer App interagieren möchte. Einige Fälle, über die Sie möglicherweise noch nachdenken möchten, wenn Sie mit dem Standardverhalten der sensorOrientierung in Ihrem Anwendungsfall nicht zufrieden sind :

  • Wenn Ihr Hauptanliegen zufällige Orientierungsänderungen während der Aktivität sind, von denen Sie glauben, dass die Sensoren und die Software des Geräts nicht gut zurechtkommen (z. B. in einem auf Neigung basierenden Spiel), sollten Sie Quer- und Hochformat unterstützen, aber nosensorfür die Ausrichtung verwenden. Dies erzwingt Landschaft auf den meisten Tablets und Hochformat auf den meisten Handys, aber ich würde dies für die meisten "normalen" Apps immer noch nicht empfehlen (einige Benutzer geben einfach gerne das Querformat-Softkeyboard auf ihren Handys ein, und viele Tablet-Benutzer lesen Hochformat - und du solltest sie lassen).
  • Wenn Sie aus irgendeinem Grund immer noch ein Porträt erzwingen müssen, ist dies sensorPortraitmöglicherweise besser als portraitfür Android 2.3+. Dies ermöglicht ein auf dem Kopf stehendes Porträt, was bei der Verwendung von Tablets durchaus üblich ist.
Yoni Samlan
quelle
54
Es ist möglich, dies für die gesamte App zu tun. Überprüfen Sie dies aus stackoverflow.com/a/9784269/1300707
Liam George Betsworth
1
Mir ist aufgefallen, dass es noch ein anderes Porträt gibt: sensorPortait. Was ist der Unterschied zwischen sensorPortait und Porträt?
Jacky
1
Wenn Sie die Dokumente von Google lesen : "Porträtausrichtung, kann jedoch je nach Gerätesensor entweder normal oder umgekehrt porträtiert werden. In API-Ebene 9 hinzugefügt." Also - das heißt - "Porträt, mit der rechten Seite nach oben oder auf dem Kopf, nur Android 2.3+."
Yoni Samlan
2
Wie ich in meiner Antwort unten bemerkt habe, ist "Nosensor" wahrscheinlich eine bessere Option, um einige Probleme zu umgehen.
Mike Weir
1
Ich muss sagen, dass ich nicht einverstanden bin. Nicht alle Erlebnisse sind mit dem Querformatmodus auf Telefonen kompatibel. Sie sollten also die UX entscheiden lassen, nicht die Sensoren. Dies ist bei Tablets jedoch nicht der Fall.
Renzo Tissoni
110

Der Dateischalter war mir AndroidManifest.xmlerst beim Lesen dieses Beitrags bekannt, daher habe ich ihn in meinen Apps stattdessen verwendet:

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);     //  Fixed Portrait orientation
Reich
quelle
9
Dies kann dazu führen, dass Ihre Aktivität beim ersten Laden springt, wenn sich das Gerät nicht in der angegebenen Ausrichtung befindet.
Dori
Ich habe diese Methode verwendet, sie in OnCreate aufgerufen und dann Daten aus einigen Asset-Dateien gelesen. Wenn ich die App mit einem Gerät im Querformat starten würde, würde sie sich drehen, aber dies würde aus irgendeinem seltsamen Grund dazu führen, dass diese Initialisierungs-Assets fälschlicherweise gelesen werden (sollte vielleicht warten, bis die Drehung abgeschlossen ist). Die Verwendung der XML-Alternative hat dieses Problem nicht verursacht.
Radu Simionescu
1
Dies kann ein Problem mit der Startsequenz für Android-Programme sein. Sie könnten versuchen, setRequestedOrientation () nach onResume () zu verschieben ???
Rich
45

Fügen Sie dies android:screenOrientation="portrait"in Ihre Manifestdatei ein, in der Sie Ihre Aktivität wie folgt deklarieren

<activity android:name=".yourActivity"
    ....
    android:screenOrientation="portrait" />

Wenn Sie Java-Code verwenden möchten, versuchen Sie es

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

bevor Sie die setContentViewMethode für Ihre Aktivität in aufrufen onCreate().

Hoffe diese Hilfe und für alle leicht verständlich ...

Deepak Swami
quelle
29

Viele der Antworten hier schlagen vor, sie "portrait"in Ihrer AndroidManifest.xml-Datei zu verwenden. Dies scheint eine gute Lösung zu sein - aber wie in der Dokumentation angegeben, wählen Sie Geräte aus, die möglicherweise nur über eine Landschaft verfügen. Sie zwingen auch bestimmte Geräte (die im Querformat am besten funktionieren) dazu, im Hochformat zu arbeiten, ohne die richtige Ausrichtung zu erhalten.

Mein Vorschlag ist, "nosensor"stattdessen zu verwenden . Dadurch kann das Gerät seine bevorzugte Standardausrichtung verwenden, keine Käufe / Downloads bei Google Play blockieren und sicherstellen, dass der Sensor Ihr Spiel (in meinem Fall NDK) nicht durcheinander bringt.

Mike Weir
quelle
Da viele dies abstimmen, möchte ich darauf hinweisen, dass ich seitdem andere Antworten gewählt habe, die "Porträt" vorschlagen, da bestimmte obskure Geräte tatsächlich unvorhersehbar reagieren, wenn sie eine In-App-Bildschirmrotation implementieren möchten, die zu einer Anforderung später für mich. Ich bezweifle auch, dass Apps mit "Hochformat" durch ein Google Play-Setup blockiert werden.
Mike Weir
Google Play filtert Apps nur im Hochformat auf Geräten nur im Querformat heraus (siehe Hinweis auf dieser Seite: developer.android.com/guide/topics/manifest/… ("Der von Ihnen angegebene Wert ermöglicht das Filtern nach Diensten wie Google) Spielen ")
miracle2k
14

Wenn Sie Benutzereinstellungen wünschen,

dann würde ich empfehlen setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Sie können die Einstellungen über ein Einstellungsmenü ändern.

Ich benötige dies, da meine Timer dem entsprechen müssen, was auf dem Bildschirm angezeigt wird. Durch Drehen des Bildschirms wird die aktuelle Aktivität zerstört.

Stephen
quelle
14

Fügen Sie einfach Like this Line in Ihr Manifest ein

android: screenOrientation = "Porträt"

<manifest
    package="com.example.speedtest"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >


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

    </application>

</manifest>   
Sunil Chaudhary
quelle
9

Sie können dies für Ihre gesamte Anwendung tun, ohne dass alle Ihre Aktivitäten eine gemeinsame Basisklasse erweitern müssen.

Der Trick besteht zunächst darin, sicherzustellen, dass Sie eine Anwendungsunterklasse in Ihr Projekt aufnehmen. In onCreate (), das beim ersten Start Ihrer App aufgerufen wird, registrieren Sie ein ActivityLifecycleCallbacks-Objekt (API-Level 14+), um Benachrichtigungen über Aktivitätslebenszyklusereignisse zu erhalten.

Dies gibt Ihnen die Möglichkeit, Ihren eigenen Code auszuführen, wenn eine Aktivität in Ihrer App gestartet (oder gestoppt oder fortgesetzt oder was auch immer) wird. Zu diesem Zeitpunkt können Sie setRequestedOrientation () für die neu erstellte Aktivität aufrufen.

Und vergessen Sie nicht, app: name = ". MyApp" in Ihre Manifestdatei aufzunehmen.

class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();  

        // register to be informed of activities starting up
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityCreated(Activity activity, 
                                          Bundle savedInstanceState) {

                // new activity created; force its orientation to portrait
                activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            }
            ....
        });
    }
}
Brinda Rathod
quelle
7

Verwenden Sie dies in onCreate () der Aktivität

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Karan Datwani
quelle
7

Sie sollten android:screenOrientation="sensorPortrait"in AndroidManifest.xml ändern

vuhung3990
quelle
6

Fügen Sie dieses Attribut einfach in Ihr Aktivitäts-Tag ein.

 android:screenOrientation="portrait"
Deepak Sharma
quelle
6

Wenn Sie nicht die Mühe machen möchten, in jedem Manifest-Aktivitätseintrag eine bessere Orientierung hinzuzufügen, erstellen Sie eine BaseActivity-Klasse (erbt 'Activity' oder 'AppCompatActivity'), die von jeder Aktivität Ihrer Anwendung anstelle von 'Activity' geerbt wird 'oder' AppCompatActivity 'und fügen Sie einfach den folgenden Code in Ihre BaseActivity ein:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    // rest of your code......
}
Alchimist
quelle
5

Fügen Sie android:screenOrientation="portrait"der Aktivität hinzu, die Sie im Querformat deaktivieren möchten.

Zhenxiao Hao
quelle
5

Wenn Sie Landscape mode for your android app(oder eine einzelne Aktivität) deaktivieren möchten, müssen Sie lediglich Folgendes hinzufügen:

android:screenOrientation="portrait"zum Aktivitäts-Tag in der AndroidManifest.xmlDatei.

Mögen:

<activity android:name="YourActivityName" 
    android:icon="@drawable/ic_launcher" 
    android:label="Your App Name" 
    android:screenOrientation="portrait">

Ein anderer Weg, programmatischer Ansatz.

Wenn Sie dies programmatisch tun möchten, z. mit Java-Code. Sie können dies tun, indem Sie den folgenden Code in die Java-Klasse der Aktivität einfügen, die im Querformat nicht angezeigt werden soll.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Ich hoffe, es hilft Ihnen. Für weitere Details, die Sie hier besuchen können, geben Sie hier die Linkbeschreibung ein

IntelliJ Amiya
quelle
2
Da so viele Antworten Ratschläge geben, die den guten Ratschlägen von @Phoenix und @Yoni widersprechen, denke ich, dass ein gutes Fazit darin besteht, zu wiederholen, was sie vorschlagen:android:screenOrientation="nosensor">
DSlomer64
1
@ DSlomer64 Ja. Wenn Sie mit Tablet-Geräten fertig werden möchten, sollten Sie den Nosensor-Wert anstelle des Porträts verwenden
IntelliJ Amiya
5

So ändern Sie die Ausrichtung in einigen Ansichten

Anstatt die Ausrichtung der gesamten Aktivität zu sperren, können Sie diese Klasse verwenden, um die Ausrichtung aus jeder Ihrer Ansichten pragmatisch dynamisch zu sperren: -

Machen Sie Ihre Ansicht Landschaft

OrientationUtils.lockOrientationLandscape(mActivity);

Machen Sie Ihre Ansicht Porträt

OrientationUtils.lockOrientationPortrait(mActivity);

Orientierung freischalten

OrientationUtils.unlockOrientation(mActivity);

Orientierungs-Util-Klasse

import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Build;
import android.view.Surface;
import android.view.WindowManager;

/*  * This class is used to lock orientation of android app in nay android devices 
 */

public class OrientationUtils {
    private OrientationUtils() {
    }

    /** Locks the device window in landscape mode. */
    public static void lockOrientationLandscape(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }

    /** Locks the device window in portrait mode. */
    public static void lockOrientationPortrait(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    /** Locks the device window in actual screen mode. */
    public static void lockOrientation(Activity activity) {
        final int orientation = activity.getResources().getConfiguration().orientation;
        final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
                .getRotation();

        // Copied from Android docs, since we don't have these values in Froyo
        // 2.2
        int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
        int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;

        // Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
        if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) {
            SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
        }

        if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }
        } else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
            } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
            }
        }
    }

    /** Unlocks the device window in user defined screen mode. */
    public static void unlockOrientation(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
    }

}
Hitesh Sahu
quelle
4

verwenden

android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait" 
Swayam
quelle
4

Sie müssen die Ausrichtung jeder Aktivität festlegen.

<activity
                android:name="com.example.SplashScreen2"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.Registration"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.Verification"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.WelcomeAlmostDone"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.PasswordRegistration"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
Akshay Paliwal
quelle
4

Klasse innerhalb der oncreate () -Methode hinzufügen

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Kumar
quelle
4

Wenn Sie Xamarin C # verwenden, funktionieren einige dieser Lösungen nicht. Hier ist die Lösung, die ich gefunden habe, um zu funktionieren.

[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]

Über der Klasse funktioniert gut, ähnlich wie bei den anderen Lösungen, auch nicht global anwendbar und muss in jedem Aktivitätsheader platziert werden.

Derek Kelly
quelle
4

Sie können Ihre bestimmte Aktivität zwingen, immer im Hochformat zu bleiben, indem Sie dies in Ihre manifest.xml schreiben

 <activity android:name=".MainActivity"
        android:screenOrientation="portrait"></activity>

Sie können Ihre Aktivität auch zwingen, im Postrait-Modus zu bleiben, indem Sie die folgende Zeile in die onCreate () -Methode Ihrer Aktivität schreiben

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}
Mansuu ....
quelle
3
<android . . . >
    . . .
    <manifest . . . >
        . . .
        <application>
            <activity android:name=".MyActivity" 
                android:screenOrientation="portrait" 
                android:configChanges="keyboardHidden|orientation">
            </activity>
        </application>
    </manifest>
</android>

quelle
3

Fügen Sie unten Lob zu Ihrem Projekt hinzu,

npm installieren

npm ich reagiere-native-Orientierung-Schließfach

Dann verwenden Sie eine Manifestklasse wie React_Native (Ihr Projektordner) / android / app / src / main / AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

<application
  android:name=".MainApplication"
  android:label="@string/app_name"
  android:icon="@mipmap/ic_launcher"
  android:allowBackup="false"
  android:theme="@style/AppTheme">
  <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="landscape"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    android:windowSoftInputMode="adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
  <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>

Vielen Dank!

Shanmuga Rajan
quelle
2

In dem erstellten <apphome>/platform/androidVerzeichnis AndroidManifest.xml(Kopieren aus dem generierten). Fügen Sie dann ALLEN Aktivitätselementen android:screenOrientation=" portrait" hinzu.

user811985
quelle
2
 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="in.co.nurture.bajajfinserv">
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>


    <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">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

Wir können die Aktivität im Hoch- oder Querformat einschränken, indem wir das Attribut oder android: screenOrientation verwenden.

Wenn wir mehr als eine Aktivität in meinem Programm haben, haben Sie die Freiheit, eine Aktivität in einem beliebigen Modus einzuschränken, und es wirkt sich niemals auf die anderen aus, die Sie nicht möchten.

Amit Kumar
quelle
2

Entweder in der Manifestklasse.

<activity android:name=".yourActivity"
    ....
    android:screenOrientation="portrait" />

oder programmatisch

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Hinweis: Sie sollten dies vor der setContentViewMethode für Ihre Aktivität in aufrufen onCreate().

Khemraj
quelle
2

Fügen Sie android:screenOrientation="portrait"in AndroidManifest.xml Datei.

Beispielsweise :

<activity android:name=".MapScreen" 
 android:screenOrientation="portrait"></activity>
Pradeep Sodhi
quelle
1

In der Hoffnung, jemand anderem zu helfen, ist das folgende Attribut für die AKTIVITÄT in AndroidManifest.xml alles, was Sie benötigen:

android: configChanges = "Orientierung"

Also, voller Aktivitätsknoten:

<activity android:name="Activity1" 
    android:icon="@drawable/icon" 
    android:label="App Name" 
    android:configChanges="orientation">
Ben
quelle
Es gibt so viele Antworten, dass Sie mehr Informationen geben sollten, warum Sie Ihre verwenden sollten. Insbesondere in Dokumenten wird diese Option nicht verwendet: "Hinweis: Die Verwendung dieses Attributs sollte vermieden und nur als letzter Ausweg verwendet werden. Weitere Informationen zur ordnungsgemäßen Behandlung eines Neustarts aufgrund einer Konfigurationsänderung finden Sie unter Behandeln von Laufzeitänderungen." developer.android.com/guide/topics/manifest/…
Murmel
1

In Kotlin kann dasselbe programmatisch erreicht werden, indem unten verwendet wird

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
Osleonard
quelle
1

Es hat bei mir funktioniert. Versuchen Sie, diesen Code in die AndroidManifest-Datei einzufügen

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme">
        ....
        ....
        </application>
Arvina Kori
quelle
Ich wäre eine großartige Lösung gewesen, da Sie nicht pro Aktivität festlegen müssen. Funktioniert leider nicht in meiner App.
Myroslav Kolodii
1

Setzen Sie es in Ihr Manifest ein.

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

Die Ausrichtung ist im Hochformat, aber wenn das Telefon des Benutzers auf dem Kopf steht, zeigt es auch den richtigen Weg. (Ihr Bildschirm dreht sich also um 180 Grad).


Das System ignoriert dieses Attribut, wenn die Aktivität im Mehrfenstermodus ausgeführt wird .

Marci
quelle
0

Wenn sich Ihre Aktivität auf den ersten Status der Geräteorientierung bezieht, rufen Sie die aktuelle Geräteorientierung in der onCreateMethode ab und korrigieren Sie sie für immer:

        int deviceRotation = ((WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();

        if(deviceRotation == Surface.ROTATION_0) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        else if(deviceRotation == Surface.ROTATION_180)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
        }
        else if(deviceRotation == Surface.ROTATION_90)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        else if(deviceRotation == Surface.ROTATION_270)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
        }
Hamid
quelle