Android: ¿permitir retrato y paisaje para tabletas, pero forzar retrato en teléfono?
Me gustaría que las tabletas pudieran visualizarse en vertical y horizontal (sw600dp o más), pero que los teléfonos estuvieran restringidos solo a vertical. No encuentro ninguna manera de elegir condicionalmente una orientación. ¿Alguna sugerencia?
A continuación se muestra una buena forma de utilizar recursos y calificadores de tamaño .
Coloque este recurso bool en res/values como bools.xml o lo que sea (los nombres de los archivos no importan aquí):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="portrait_only">true</bool>
</resources>
Ponga este en res/values-sw600dp y res/values-xlarge:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="portrait_only">false</bool>
</resources>
Consulte esta respuesta complementaria para obtener ayuda para agregar estos directorios y archivos en Android Studio.
Luego, en el método onCreate de tus Actividades puedes hacer esto:
if(getResources().getBoolean(R.bool.portrait_only)){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Los dispositivos que tienen más de 600 dp en la dirección de ancho más pequeño, o extra grande en dispositivos anteriores a Android 3.2 (tabletas, básicamente) se comportarán normalmente, según el sensor y la rotación bloqueada por el usuario, etc. Todo lo demás (prácticamente los teléfonos) será solo vertical.
Suplemento a la respuesta aceptada.
Puede realizar los siguientes pasos en Android Studio para agregar los directorios res/values-sw600dp
y res/values-large
con sus bools.xml
archivos.
valores-sw600dp
En primer lugar, en la pestaña Proyecto, seleccione el filtro Proyecto (en lugar de Android) en el navegador.
Luego haga clic derecho en el app/src/main/res
directorio. Elija Nuevo > Directorio de recursos de Android .
Seleccione Ancho de pantalla más pequeño y luego presione el botón >> .
Escriba 600
para obtener el ancho de pantalla más pequeño. El nombre del directorio se generará automáticamente. Decir ok.
Luego haga clic derecho en el values-sw600dp
archivo recién creado. Elija Nuevo > Archivo de recursos de valores . Escriba bools
el nombre.
valores grandes
Agregar un values-large
directorio solo es necesario si admite versiones anteriores a Android 3.2 (nivel de API 13). De lo contrario, puedes saltarte este paso. El values-large
directorio corresponde a values-sw600dp
. ( values-xlarge
corresponde a values-sw720dp
.)
Para crear el values-large
directorio, siga los mismos pasos anteriores, pero en este caso elija Tamaño en lugar de Ancho de pantalla más pequeño. Seleccione Grande . El nombre del directorio se generará automáticamente.
Haga clic derecho en el directorio como antes para crear el bools.xml
archivo.