example - responsive android studio
¿Dónde android.max_aspect meta marca la diferencia? (3)
Un blog reciente explica que debemos usar
<meta-data android:name="android.max_aspect" android:value="2.1" />
en el elemento <application>
de AndroidManifest.xml para una visualización óptima en dispositivos de pantalla súper panorámica, por ejemplo, Samsung Galaxy S8.
Para probar esto, instalé mi aplicación (no max_aspect, no resizeableActivity flags; targetSdkVersion=22
, compileSdkVersion=24
) en un Android 7.1.1. Emulador con resolución personalizada de 2960x1440. Todas las actividades, incluida la inmersiva, llenan la pantalla sin márgenes como se muestra en la publicación del blog.
Agregué explícito
<meta-data android:name="android.max_aspect" android:value="1.5" />
Y esto tampoco tuvo efecto en el emulador.
Entonces, la pregunta: ¿esta meta marca solo está marcada en los dispositivos reales o hay alguna configuración que no pude ver en mi emulador?
Actualización: traté de contactar a Neto Marin , el autor de la citada publicación del blog. Encontré un tweet orgulloso tweet sobre su contribución a la comunidad global de Android Dev, pero no pudo obtener una respuesta de él.
El android.max_aspect solo hace diferencia si tu android:resizeableActivity no es cierto. Si la API de destino de su aplicación es 24 o superior android: resizeableActivity se establece como verdadero.
Nota: no es necesario establecer una relación de aspecto máxima si el atributo android: resizeableActivity de una actividad está configurado como verdadero. Si su aplicación apunta al nivel de API 24 o superior, este atributo se establece de manera predeterminada en verdadero. Para obtener más información, consulte Configuración de su aplicación para el modo de ventanas múltiples.
Por favor, consulte la documentation .
El letterboxing ocurre en diferentes dispositivos, como Samsung S8, LG G6 , Pixel 2 XL y algunos otros. Parece ser parte de Android 8 y especialmente 8.1.
La definición oficial de compatibilidad de Android 8.1 incluye el siguiente párrafo:
[C-0-1] Las implementaciones de dispositivos con Configuration.uiMode establecido como UI_MODE_TYPE_NORMAL DEBEN tener un valor de relación de aspecto entre 1.3333 (4: 3) y 1.86 (aproximadamente 16: 9), a menos que la aplicación pueda considerarse como lista para estirarse más tiempo al cumplir una de las siguientes condiciones:
- La aplicación ha declarado que admite una relación de aspecto de pantalla más grande a través del valor de metadatos de documentation .
- La aplicación declara que puede cambiarse de tamaño a través del atributo android:resizeableActivity .
- La aplicación está dirigida a un nivel de API 26 o superior y no declara un android:MaxAspectRatio que restringiría la relación de aspecto permitida.
Tenga en cuenta que los dos primeros atributos son a nivel de aplicación, mientras que el último atributo pertenece a Activity.
Algunos proveedores permiten al usuario final controlar esto aún más. LG tiene el menú "App Scaling" ; Samsung te permite elegir "aplicaciones de pantalla completa" en "Configuración de pantalla".
Tienes que configurar la relación de aspecto del emulador según tu necesidad.
Prueba estos pasos:
In Android Studio, open AVD Manager
Create Virtual Device
New Hardware Profile
Set name: "18:9 aspect ratio screen"
Set resolution: 1080 x 2160
Finish
Select "18:9 aspect ratio screen"
Next
Select system image Nougat (API Level 25)
Next
AVD Name: "API Level 25 Nougat 18x9 aspect ratio screen"
Finish
A continuación, ejecute en este emulador.
Si no establece un valor y android:resizeableActivity
no es verdadero, entonces la relación de aspecto máxima se establece de manera predeterminada en 1.86 (aproximadamente 16: 9) y su aplicación no aprovechará el espacio de pantalla adicional.
No es necesario establecer una relación de aspecto máxima si el atributo android:resizeableActivity
una actividad se establece en verdadero. Si su aplicación apunta al nivel de API 24 o superior, este atributo se establece de manera predeterminada en verdadero.