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.