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

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.
Cristian
fuente
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"

Praveen
fuente
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.
Solución de código de Android
fuente
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);
Meysam Keshvari
fuente
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;-)

Codebeat
fuente
-5

yo suelo

 android:screenOrientation="nosensor"

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

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