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

Ankit Rawat
fuente
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.

Robin Hood
fuente
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" />,.

Halim Qarroum
fuente
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.

Radu Simionescu
fuente
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);
}
Bhavesh Hirpara
fuente
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.

Sumodh S
fuente
1

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

Ravish Kumar
fuente
0
android:screenOrientation="locked"

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

Anton Shikhert
fuente
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>

Chetan
fuente
-1

Solo agrega:

android:screenOrientation="portrait"

en " AndroidManifest.xml ":

<activity
android:screenOrientation="portrait"
android:name=".MainActivity"
android:label="@string/app_name">
</activity>
himanshu jain
fuente