Android: ¿permitir retrato y paisaje para tabletas, pero forzar retrato en teléfono?

Resuelto Kenny Wyland asked hace 54 años • 15 respuestas

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?

Kenny Wyland avatar Jan 01 '70 08:01 Kenny Wyland
Aceptado

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.

Brian Christensen avatar Feb 10 '2013 01:02 Brian Christensen

Suplemento a la respuesta aceptada.

Puede realizar los siguientes pasos en Android Studio para agregar los directorios res/values-sw600dpy res/values-largecon sus bools.xmlarchivos.

valores-sw600dp

En primer lugar, en la pestaña Proyecto, seleccione el filtro Proyecto (en lugar de Android) en el navegador.

ingrese la descripción de la imagen aquí

Luego haga clic derecho en el app/src/main/resdirectorio. Elija Nuevo > Directorio de recursos de Android .

Seleccione Ancho de pantalla más pequeño y luego presione el botón >> .

ingrese la descripción de la imagen aquí

Escriba 600para obtener el ancho de pantalla más pequeño. El nombre del directorio se generará automáticamente. Decir ok.

ingrese la descripción de la imagen aquí

Luego haga clic derecho en el values-sw600dparchivo recién creado. Elija Nuevo > Archivo de recursos de valores . Escriba boolsel nombre.

valores grandes

Agregar un values-largedirectorio solo es necesario si admite versiones anteriores a Android 3.2 (nivel de API 13). De lo contrario, puedes saltarte este paso. El values-largedirectorio corresponde a values-sw600dp. ( values-xlargecorresponde a values-sw720dp.)

Para crear el values-largedirectorio, 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.

ingrese la descripción de la imagen aquí

Haga clic derecho en el directorio como antes para crear el bools.xmlarchivo.

Suragch avatar Sep 03 '2016 02:09 Suragch