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?

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


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.


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

            }

            ....

        });

    }
}

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

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

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.


8

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

android:screenOrientation="portrait" 

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> 

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


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"

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

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"

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

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 {}

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;

-11

Geben Sie in Ihrem Manifest Folgendes ein:

<activity
    android:screenOrientation="portrait"
    <!--- Rest of your application information ---!>
</activity>

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.