Wie stelle ich die gesamte Anwendung nur im Hochformat ein?

201

Wie stelle ich es so ein, dass die Anwendung nur im Hochformat ausgeführt wird? Ich möchte, dass der Querformatmodus deaktiviert wird, während die Anwendung ausgeführt wird. Wie mache ich das programmgesteuert?

Naresh
quelle

Antworten:

293

Für jede Android-Version

Aus XML

Sie können android:screenOrientation="portrait"für jede Aktivität in Ihrer Datei manifest.xml angeben . Sie können diese Option nicht für das applicationTag angeben .

Aus Java

Eine andere Möglichkeit besteht darin, dies programmgesteuert durchzuführen, beispielsweise in einer ActivityBasisklasse:

@Override
public void onCreate(Bundle savedInstanceState) {
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Für Android 4+ (API 14+)

Die letzte Option besteht darin, dies mit Listenern für den Aktivitätslebenszyklus zu tun, die erst seit Android 4.0 (API 14+) verfügbar sind. Alles geschieht in einer benutzerdefinierten ApplicationKlasse:

@Override
public void onCreate() {
    super.onCreate();  
    registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
        @Override
        public void onActivityCreated(Activity a, Bundle savedInstanceState) {
            a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    });
}

ActivityLifecycleAdapterist nur eine Hilfsklasse, die Sie erstellen müssen und die eine leere Implementierung von ist ActivityLifecycleCallbacks(damit Sie nicht jede einzelne Methode dieser Schnittstelle überschreiben müssen, wenn Sie nur eine davon benötigen).

Vincent Mimoun-Prat
quelle
1
es funktioniert nicht. Es wechselt in den Querformatmodus, wenn ich das Gerät drehte. und mehr im Code verwende ich diese setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR); Anweisungen für den Fortschrittsbalken. Gibt es ein Problem mit diesen Anweisungen?
Naresh
es funktioniert. eine weitere Sache, die nicht über zwei Anweisungen in Ihrem Codierungsteil steht. Dies bedeutet, dass der Sensor die Bildschirmausrichtung ändern kann.
Naresh
3
-1: Der Fragesteller hat speziell gefragt, wie es // programmgesteuert // und für die gesamte Anwendung gemacht werden soll (was mich glauben lässt, dass sie es nicht für jede Aktivität einzeln machen wollen).
Jwir3
@ jwir3, ich bin anderer Meinung. "Programmieren" schreibt nicht nur Code-Code, sondern auch alle Metadateien, Ressourcen, die Sie verwenden, um die Besonderheiten der IDE zu umgehen usw. Dies ist eine gute Antwort, behebt das Problem und das OP hat es als korrekt markiert anscheinend eine ausreichende Antwort auf die ursprüngliche Frage.
James Webster
9
Bei Verwendung der LifeCycleCallbacks-Methode kommt es zu Verzögerungen beim Starten von Aktivitäten, wenn Sie Ihr Gerät im Querformat halten (was normalerweise der Fall ist). Ich denke, das liegt daran, dass die Geräte zwischen den Aktivitäten kurz in den Querformatmodus zurückkehren und Zeit benötigen, um dies zu erledigen. Das Festlegen der Ausrichtung im Manifest hat diesen Effekt nicht.
Anonym
142

Ja, Sie können dies sowohl programmgesteuert als auch für alle Ihre Aktivitäten tun, indem Sie eine AbstractActivity erstellen, die alle Ihre Aktivitäten erweitert.

public abstract class AbstractActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

Diese abstrakte Aktivität kann auch für ein globales Menü verwendet werden.

Jan-Terje Sørensen
quelle
3
Hinweis: Ich bin der Meinung, dass ActivityInfo.SCREEN_ORIENTATION_NOSENSORdies die bessere Antwort sein sollte, da das Gerät im Standardzustand belassen werden soll, da einige Geräte keine Porträtausrichtung haben. 'Nosensor' funktioniert jedoch NICHT für mich, daher steht die Antwort von @ arcone für mich.
David Manpearl
104

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

Der Trick besteht zunächst darin, sicherzustellen, dass Sie eine ApplicationUnterklasse in Ihr Projekt aufnehmen. In seiner Funktion onCreate(), die beim ersten Start Ihrer App aufgerufen wird, registrieren Sie eineActivityLifecycleCallbacks 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. An dieser Stelle können Sie setRequestedOrientation()die neu erstellte Aktivität aufrufen .

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);

            }

            ....

        });

    }
}
Graham Borland
quelle
9
Dies ist die einzige Antwort, die sich mit der Frage befasst. Eine Zeile, um sie alle zu regieren.
Samuel
2
* Eine Klasse, um sie alle zu regieren.
Jay Mayu
3
und vergessen Sie niemals, im Manifest Application Root hinzuzufügen. android: name = ". MyApp"
Faisal Naseer
2
Dieser Ansatz ruft das onCreate () der Aktivität zweimal auf.
Sandeep R
3
Das Problem besteht darin, dass Sie das Gerät horizontal halten und neue Aktivitäten starten. Es wird im Querformat angezeigt und dann im Hochformat gedreht. Die einzige gute Möglichkeit, die vollständige App im Hochformat zu sperren, besteht darin, jede Aktivität in Manifest zu markieren.
Den
42

Sie können dies in Ihrer Manifestdatei festlegen.

android:name=".your launching activity name"
android:screenOrientation="portrait"

und Sie können dasselbe auch erreichen, indem Sie den Code in Ihre Klassendatei schreiben, wie:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
SRam
quelle
1
@ naresh pls akzeptieren ans und wenn Sie eine Lösung nach Ihren Bedürfnissen haben, wird es auch Ihre Bewertung Rennen
SRam
24

Fügen Sie der Aktivität in der Datei AndroidManifest.xml android: screenOrientation = "Porträt" hinzu. Beispielsweise:

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">
Nikunj Patel
quelle
25
Er sagte, Anwendung nicht Aktivität.
Reinherd
10

Verwenden:

android:screenOrientation="portrait" 

Schreiben Sie diese Zeile einfach in die Manifestdatei Ihrer Anwendung in jeder Aktivität, die Sie nur im Hochformat anzeigen möchten.

Deepak Sharma
quelle
8

Schreiben Sie dies für jede Aktivität in Ihre Manifestdatei:

android:screenOrientation="portrait" 
Zwiebel
quelle
2

Ab Android Entwicklerhandbuch:

"Ausrichtung" Die Bildschirmausrichtung hat sich geändert - der Benutzer hat das Gerät gedreht. Hinweis: Wenn Ihre Anwendung auf API-Level 13 oder höher abzielt (wie durch die Attribute minSdkVersion und targetSdkVersion deklariert), sollten Sie auch die Konfiguration "screenSize" deklarieren, da sie sich auch ändert, wenn ein Gerät zwischen Hoch- und Querformat wechselt.

"screenSize" Die aktuell verfügbare Bildschirmgröße hat sich geändert. Dies stellt eine Änderung der derzeit verfügbaren Größe im Verhältnis zum aktuellen Seitenverhältnis dar und ändert sich, wenn der Benutzer zwischen Quer- und Hochformat wechselt. Wenn Ihre Anwendung jedoch auf API-Stufe 12 oder niedriger abzielt, behandelt Ihre Aktivität diese Konfigurationsänderung immer selbst (diese Konfigurationsänderung startet Ihre Aktivität nicht neu, selbst wenn sie auf einem Android 3.2-Gerät oder höher ausgeführt wird). Hinzugefügt in API Level 13.

In der Datei AndroidManifest.xml können wir also Folgendes einfügen:

<activity
            android:name=".activities.role_activity.GeneralViewPagerActivity"
            android:label="@string/title_activity_general_view_pager"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            >
        </activity> 
super1ha1
quelle
1

Das Hinzufügen <preference name="orientation" value="portrait" />unter <widget>in meiner config.xml hat bei mir funktioniert.

(Die anderen Lösungen funktionierten entweder nicht auf meinem Gerät, wurden beim Erstellen überschrieben oder gaben während des Erstellungsprozesses Verfallsfehler an.)

Philip
quelle
Wo ist die besagte config.xml? Auf welche Entwicklungsplattform beziehen Sie sich?
Tash Pemhiwa
1

In der Manifest-Datei, welche Aktivität Sie in "Porträt" verwenden möchten, müssen Sie diesen Code in das Aktivitäts-Tag schreiben

  android:screenOrientation="portrait" 

so was

         android:icon="@drawable/icon"
        android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity" 
        android:screenOrientation="portrait" >

Wenn Sie jedoch einen Bildschirm im Querformat wünschen, verwenden Sie diesen Code wie folgt

android:screenOrientation="landscape"
Bilal Jarral
quelle
1
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //setting screen orientation locked so it will be acting as potrait
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}
Emon Hossain Munna
quelle
0

Wenn sich jemand gefragt hat, wie Sie dies für Ihre gesamte Anwendung tun können, ohne dass alle Ihre Aktivitäten eine gemeinsame Basisklasse in Kotlin erweitern müssen , sehen Sie sich das folgende Beispiel an:

class InteractiveStoryApplication: Application() {
override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
        override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
            activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
        }

        override fun onActivityPaused(activity: Activity?) {
        }

        override fun onActivityResumed(activity: Activity?) {
        }

        override fun onActivityDestroyed(activity: Activity?) {
        }

        override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
        }

        override fun onActivityStarted(activity: Activity?) {
        }

        override fun onActivityStopped(activity: Activity?) {
        }
    })
}
}

und dann müssen Sie Ihre gemeinsame Basisklasse in AndroidManifest wie folgt hinzufügen:

<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"
Ashildr
quelle
0

Sie können dies auf zwei Arten tun.

  1. Fügen Sie android:screenOrientation="portrait"Ihrer Manifestdatei die entsprechende Aktivität hinzu
  2. Fügen Sie setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); Ihrer Aktivität die Methode `onCreate () hinzu
Saneesh
quelle
0

Ähnlich wie bei Graham Borland ... aber es scheint, dass Sie keine Anwendungsklasse erstellen müssen, wenn Sie nicht möchten ... erstellen Sie einfach eine Basisaktivität in Ihrem Projekt

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

Erweitern Sie diese Klasse anstelle von AppCompatActivity, wenn Sie den Potrait-Modus verwenden möchten

public class your_activity extends BaseActivity {}
Raktim Bhattacharya
quelle
0

Für Xamarin-Benutzer:

Wenn Sie alle Ihre Aktivitäten auf ein BaseActivityeinfaches Hinzufügen erweitern:

this.RequestedOrientation = ScreenOrientation.Portrait;

Dadurch wird das Problem behoben. Wenn Sie möchten, dass sich eine bestimmte Aktivität im Querformat befindet, überschreiben Sie diese in OnActivityCreated. Wie:

this.Activity.RequestedOrientation = ScreenOrientation.Landscape;
Nawin
quelle
-11

Geben Sie in Ihrem Manifest Folgendes ein:

<activity
    android:screenOrientation="portrait"
    <!--- Rest of your application information ---!>
</activity>
Tyce Gates
quelle
6
Dies fügt nichts Neues hinzu, was 3 Jahre alte Antworten noch nicht gesagt haben. Sie könnten es löschen. Wenn Sie Ihre Antwort bearbeiten möchten, um weitere Informationen aufzunehmen, die Ihre Antwort von anderen unterscheiden, antworten Sie mir bitte.
Artjom B.
1
android: screenOrientation = "Porträt" kann nicht zum Anwendungs-Tag hinzugefügt werden, es muss innerhalb des Aktivitäts-Tags gehen
Hossein Amini