¿Cómo bloquear la orientación vertical de la aplicación Android en teléfonos y horizontal en tabletas?


82

Estoy desarrollando una aplicación para Android cuya orientación no quiero que cambie al modo horizontal cuando el usuario gira el dispositivo. Además, quiero que la orientación bloqueada sea el modo vertical en los teléfonos y el modo horizontal en las tabletas. ¿Se puede lograr esto? En caso afirmativo, ¿cómo? Gracias.


2
@CommonsWare: Mi aplicación tiene menús con listas largas que se recorren de manera mucho más eficiente en el modo retrato en los teléfonos.
Ankit Rawat

3
Luego, cree un mejor diseño de GUI, uno que respete la capacidad de sus usuarios para usar sus dispositivos en cualquier orientación.
CommonsWare

Respuestas:


155

Solo tiene que definir la propiedad a continuación dentro del elemento de actividad en su AndroidManifest.xmlarchivo. Restringirá su orientación al retrato.

android: screenOrientation = "retrato"

Ejemplo:

        <activity
            android:name="com.example.demo_spinner.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>

Además, según el comentario de Eduard Luca a continuación, también puede usar screenOrientation="sensorPortrait"si desea habilitar la rotación de 180 grados.


21
O sensorPortraitsi desea que el usuario pueda girar la pantalla 180 grados :)
Eduard Luca

44

Tienes que agregar la android:screenOrientation="portrait"directiva en tu AndroidManifest.xml. Esto debe hacerse en su <activity>etiqueta.

Además, la guía para desarrolladores de Android establece que:

[...] también debe declarar explícitamente que su aplicación requiere una orientación vertical u horizontal con el elemento. Por ejemplo <uses-feature android:name="android.hardware.screen.portrait" />,.


6
+1 por la cita de buenas prácticas y porque esta debería ser la respuesta aceptada, ya que es correcta y se publicó primero ...
Eduard Luca

7
¿Existe una forma global?
Tyler Pfaff

21

Puedo ver que ha aceptado una respuesta que no resuelve su problema por completo:

android:screenOrientation="portrait" 

Esto obligará a que su aplicación esté vertical tanto en teléfonos como en tabletas.

Puede forzar la aplicación en la orientación "preferida" del dispositivo usando

android:screenOrientation="nosensor"

Esto provocará que su aplicación se muestre en modo vertical en la mayoría de los teléfonos móviles y horizontal en tabletas. Hay muchos teléfonos con teclados que fueron diseñados para modo horizontal. Forzar su aplicación a retratar puede hacerla casi inutilizable en tales dispositivos. Android también está migrando recientemente a otros tipos de dispositivos. Es mejor dejar que el dispositivo elija la orientación preferida.


Para aquellos curiosos sobre la configuración "nosensor", pueden leer más en los documentos oficiales en developer.android.com/guide/topics/manifest/activity-element
James Jordan Taylor

11

Puede ser ... tienes que identificar si es tableta o teléfono mediante programación ... Primero verifica que el dispositivo sea el teléfono o tableta

¿Determinar si el dispositivo es un teléfono inteligente o una tableta?

Tableta o teléfono - Android

Entonces......

if(isTablet)
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);      
}else
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Hola @Bhavesh, No funciona para dispositivos móviles con Android 9.
Manikandan K

¿cómo podemos identificar si es tableta ... no explicaste eso ...
Abdul Wahid

Puede ver la respuesta editada. He incluido cómo determinar si el dispositivo es un teléfono inteligente o una tableta.
Bhavesh Hirpara

3
<activity android:name=".yourActivity"
          android:screenOrientation="portrait" ... />

agregar a la actividad principal y agregar

android:configChanges="keyboardHidden"

para evitar que su programa cambie de modo cuando se llama al teclado.


1

Establezca la orientación de la pantalla en vertical en el archivo de manifiesto en la etiqueta de actividad.


0
android:screenOrientation="locked"

en <application>para todas las aplicaciones en <activity>para la actividad real


0

Establezca la orientación de la pantalla en vertical en el archivo de manifiesto en la etiqueta de actividad.

Aqui el ejemplo

Debes participar en todas las actividades

Agregar las siguientes líneas en actividad

para retrato

android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"

para el paisaje

android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity"

Aquí el ejemplo de MainActivity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="org.thcb.app">
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".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>

<activity android:name=".MainActivity2"
            android:screenOrientation="landscape"
            tools:ignore="LockedOrientationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


-1

Solo agrega:

android:screenOrientation="portrait"

en " AndroidManifest.xml ":

<activity
android:screenOrientation="portrait"
android:name=".MainActivity"
android:label="@string/app_name">
</activity>
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.