¿Quiero que mi aplicación de Android se ejecute solo en modo vertical?


359

¿Quiero que mi aplicación de Android se ejecute solo en modo vertical? ¿Cómo puedo hacer eso?

Respuestas:


779

En el manifiesto, configure esto para todas sus actividades:

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

Dejame explicar:

  • Con android:configChanges="orientation"usted, dígale a Android que usted será responsable de los cambios de orientación.
  • android:screenOrientation="portrait" configura el modo de orientación predeterminado.

50
¿No sería genial si pudiéramos establecer una orientación "global" para TODAS las actividades en la Aplicación? Parece que no tenemos otra opción que copiar / pegar el atributo "retrato" en cada actividad ...
Eduardo Coelho

63
Es suficiente para configurarandroid:screenOrientation="portrait"
hasta el

11
@EduardoCoelho en realidad puedes hacer una clase base PortraitActivityy en onCreate call setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)Todas las actividades que extiendan esto no rotarán
Twinone

1
@Twinone: ¿Qué tal cuando diferentes actividades quieren heredar de diferentes subclases de Activity, como una actividad se extiende desde ListActivitymientras que otras se extienden simplemente desde Activity?
RestInPeace

3
@RestInPeace Sí, buen punto. Pero esa no es mi idea de estar equivocado, solo Java no admite herencia múltiple :)
Twinone

57

En Android manifiesto de archivo, puesto atributo para el <activity>que seandroid:screenOrientation="portrait"


2
déjame agregar: desde Android Sudio 3.6 necesito usar android: screenOrientation = "fullSensor" o android: screenOrientation = "unspecified". fullSensor Significa que tiene activado el "Rotar apagado" o que no cambiará la orientación según mueva el teléfono. no especificado Significa que si tiene el botón Girar apagado, permanecerá solo en esa orientación y, de lo contrario, cambiará la orientación según mueva el teléfono.
Kirguduck

24

Hay dos maneras,

  1. Agregar android:screenOrientation="portrait"para cada actividad en el archivo de manifiesto
  2. Agregue this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);en cada archivo java.

14
La segunda opción tiene el horrible efecto secundario de que reiniciará su actividad cuando se inicie en Portrait.
Joakim

4

en el manifiesto:

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

o: en MainActivity

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

Consigo 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.. Agregar xmlns:tools="http://schemas.android.com/tools"el elemento raíz resuelve el problema
boabojad

3

Publicación antigua lo sé. Para ejecutar su aplicación siempre en modo vertical, incluso cuando la orientación puede o no se intercambia, etc. (por ejemplo, en tabletas), diseñé esta función que se usa para configurar el dispositivo en la orientación correcta sin la necesidad de saber cómo es vertical y horizontal Las funciones están organizadas en el 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); }

    }

¡Funciona de maravilla!

AVISO: Cambie this.activitypor su actividad o agréguelo a la actividad principal y elimine this.activity;-)


-5

yo suelo

 android:screenOrientation="nosensor"

Es útil si no desea admitir el modo vertical al revés.


Si esto hace lo que creo que hace, realmente no obliga a la pantalla a retratarse, lo que es posible que desee hacer.
Lassi Kinnunen

¿Por qué no eliminas este comentario? no tiene sentido
Alexander Zaldostanov

En el archivo de manifiesto de Android, simplemente agregue el atributo para su <actividad> que android: screenOrientation = "portrait"
Avinash Shinde

Gracias por su respuesta, esto es útil para mí.
Md. Shofiulla
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.