Voglio che la mia applicazione Android venga eseguita solo in modalità verticale?


359

Voglio che la mia applicazione Android venga eseguita solo in modalità verticale? Come lo posso fare?

Risposte:


779

Nel manifest, impostalo per tutte le tue attività:

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

Lasciatemi spiegare:

  • Con android:configChanges="orientation"te dici ad Android che sarai responsabile dei cambiamenti di orientamento.
  • android:screenOrientation="portrait" si imposta la modalità di orientamento predefinita.

50
Non sarebbe bello se potessimo impostare un orientamento "globale" per TUTTE le attività nell'applicazione? Sembra che non abbiamo altra scelta che copiare / incollare l'attributo "ritratto" su ogni attività ...
Eduardo Coelho,

63
Basta impostareandroid:screenOrientation="portrait"
Fino al

11
@EduardoCoelho puoi effettivamente creare una classe base PortraitActivitye in onCreate call setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)Tutte le attività che si estendono non ruotano
Twinone,

1
@Twinone: Che ne dici di quando diverse attività vogliono ereditare da diverse sottoclassi di Activity, come un'attività si estende da ListActivitymentre altre si estendono semplicemente da Activity?
RestInPeace,

3
@RestInPeace Sì, buon punto. Ma non è una mia idea sbagliare, è solo Java che non supporta l'ereditarietà multipla :)
Twinone,

57

Nel file manifest Android, inserisci l'attributo per <activity>quelloandroid:screenOrientation="portrait"


2
vorrei aggiungere: da Android Sudio 3.6 è necessario utilizzare android: screenOrientation = "fullSensor" o android: screenOrientation = "non specificato". fullSensor Significa che hai ON "Ruota off" o no cambierà l'orientamento in base a quando sposti il ​​telefono. Mezzi non specificati se hai ON il Rotate off quindi rimarrà solo in quell'orientamento e in caso contrario cambierà l'orientamento in base al tuo spostamento del telefono.
Kirguduck,

24

Ci sono due modi,

  1. Aggiungi android:screenOrientation="portrait"per ogni attività nel file manifest
  2. Aggiungi this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);in ogni file Java.

14
La seconda opzione ha l'orribile effetto collaterale che riavvierà la tua attività quando viene avviato in Ritratto.
Joakim,

4

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

oppure: in MainActivity

@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Ho capito 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.. L'aggiunta xmlns:tools="http://schemas.android.com/tools"dell'elemento radice risolve il problema
Żabojad

3

Vecchio post lo so. Al fine di eseguire la tua app sempre in modalità verticale anche quando l'orientamento può essere o viene scambiato ecc. (Ad esempio su tablet) ho progettato questa funzione che viene utilizzata per impostare il dispositivo con l'orientamento corretto senza la necessità di sapere come ritratto e paesaggio le funzionalità sono organizzate sul dispositivo.

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

    }

Funziona come un fascino!

AVVISO: modifica in this.activitybase alla tua attività o aggiungilo all'attività principale e rimuovi this.activity;-)


-5

Io uso

 android:screenOrientation="nosensor"

È utile se non si desidera supportare la modalità verticale capovolta.


se questo fa quello che penso, non forza lo schermo in verticale, cosa che potresti voler fare.
Lassi Kinnunen,

perché non rimuovi questo commento! non ha senso
Alexander Zaldostanov,

Nel file manifest Android basta aggiungere l'attributo per la tua <attività> che android: screenOrientation = "portrait"
Avinash Shinde

Grazie per la tua risposta, questo è utile per me.
Md. Shofiulla,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.