Android activa un modo de compatibilidad para las apps que declaran la orientación o restricciones de cambio de tamaño. El modo de compatibilidad garantiza un comportamiento aceptable de la app en dispositivos con pantalla grande y teléfonos plegables con tapa, pero con una usabilidad deficiente.
Las anulaciones por app permiten que los fabricantes de dispositivos cambien el comportamiento de la app para mejorar la experiencia del usuario o evitar que las apps fallen dispositivos específicos.
Dispositivos de referencia
Los siguientes dispositivos pueden requerir anulaciones por app debido a errores parámetros de configuración que no son compatibles con las apps:
- Tablets: La orientación natural de algunas tablets, como la Pixel Tablet,
es horizontal. Un dispositivo se encuentra en su orientación natural cuando
Devoluciones
Display#getRotation()
Surface.ROTATION_0
Si las apps suponen queROTATION_0
es vertical, es posible que los diseños de la app y la vista previa de la cámara no coincidan con la pantalla del dispositivo. - Plegables horizontales: Algunos dispositivos plegables, como el Pixel Fold, están en orientación vertical cuando está plegado, pero orientación horizontal cuando está desplegado. Si las apps asumen que la orientación desplegada es vertical, parpadea o bucles o problemas de diseño.
- Teléfonos plegables con tapa: Los teléfonos con tapa desplegados suelen estar en posición vertical orientación. Pero, cuando se pliegan, los teléfonos suelen tener una pantalla pequeña en con orientación horizontal. Las aplicaciones deben identificar y admitir orientaciones de las pantallas.
Problemas comunes de compatibilidad
Las apps experimentan problemas de compatibilidad con mayor frecuencia debido a su orientación de cambio de tamaño y de relación de aspecto, la administración incorrecta de la orientación de vista previa de la cámara y las APIs que se usan de manera inadecuada.
Formato letterbox
El formato letterbox posiciona la app en el centro de la pantalla o, en pantallas grandes, a un lado o al otro para un acceso conveniente. Mate (barras de colores sólidos) o fondo de pantalla desenfocado) cubren el área de visualización sin uso a los costados o en la parte superior y en la parte inferior de la aplicación.
El formato letterbox suele utilizarse en dispositivos con pantallas grandes porque las dimensiones y la relación de aspecto de la pantalla del dispositivo suele ser diferente de las de la teléfonos, para los que se diseñan la mayoría de las aplicaciones.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/letterboxing.png?authuser=7&hl=es)
Figura 1: La app solo con orientación vertical tiene formato letterbox cuando la tablet o el dispositivo plegable está en posición horizontal.
Problema
La app no es compatible con todas las configuraciones de pantalla porque se corrigieron los errores orientación, relación de aspecto fija o no puede cambiar de tamaño.
Entre los parámetros de configuración que controlan la orientación y el ajuste de tamaño de la app, se incluyen lo siguiente:
screenOrientation
: Especifica una orientación fija para una aplicación. Las apps también pueden establecer la orientación en el tiempo de ejecución usandoActivity#setRequestedOrientation()
resizeableActivity
: Indica si el sistema puede cambiar el tamaño de las apps para que se ajusten a ventanas de diferentes dimensiones En Android 11 (nivel de API) 30) y versiones anteriores, especifica si las apps admiten el modo multiventana. Activada Android 12 (nivel de API 31) y versiones posteriores especifica si las apps admiten modo multiventana en pantallas pequeñas (compacta) clase de tamaño de ventana). En Android 12 y versiones posteriores, las apps Compatibilidad con el modo multiventana en pantallas grandes (ventana mediana o expandida clase de tamaño) independientemente de este parámetro de configuración.maxAspectRatio
: Especifica la relación de aspecto máxima compatibles con la app. Solo las apps conresizeableActivity
establecido enfalse
pueden establecermaxAspectRatio
.minAspectRatio
: Especifica la relación de aspecto mínima. compatibles con la app. Solo las apps conresizeableActivity
establecido enfalse
pueden establecerminAspectRatio
.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/letterboxing_issue.png?authuser=7&hl=es)
La app con solo orientación vertical no se puede usar en dispositivos en posición horizontal
Optimización
La app debe admitir todos los dispositivos y la pantalla del modo multiventana. y tamaños. Quitar toda la orientación y la relación de aspecto fija restricciones de los diseños de tu app y del archivo de manifiesto de la app.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/letterboxing_optimization.png?authuser=7&hl=es)
La app admite todas las orientaciones del dispositivo
Solución al problema de compatibilidad
Si una app con orientación o relación de aspecto fijas se ejecuta en una ventana donde La app no admite directamente el tamaño o la orientación de la ventana, Android formato letterbox para preservar la continuidad.
A partir de Android 12 (nivel de API 31) y hasta la versión 12L (nivel de API 32), la plataforma aplica una variedad de mejoras a las aplicaciones en formato letterbox. Dispositivo los fabricantes implementan las mejoras de la IU. No necesitas realizar ninguna acción adicional para que tu app se beneficie de las mejoras.
Android 12 (nivel de API 31) incorpora las siguientes mejoras estéticas, que lo pueden configurar los fabricantes de dispositivos:
- Esquinas redondeadas: Las esquinas de la ventana de la app lucen un aspecto más refinado.
- Transparencia de la barra del sistema: Barras de estado y navegación, que se superponen en la son semitransparentes, lo que hace que los íconos de las barras siempre sean visibles sobre el en formato letterbox.
- Relación de aspecto configurable: Se puede ajustar la relación de aspecto de la app. para mejorar la apariencia de la app.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/enhanced_letterboxing.png?authuser=7&hl=es)
Figura 2: App en formato letterbox con mejoras en la IU.
La versión 12L (nivel de API 32) agrega las siguientes mejoras funcionales:
Posicionamiento configurable: En pantallas grandes, los fabricantes de dispositivos pueden posicionar la aplicación a la izquierda o derecha de la pantalla, lo que hace que y facilitar la interacción.
Botón de reinicio rediseñado: Los fabricantes de dispositivos pueden brindarte el reinicio. botón para aplicar un nuevo aspecto al modo de compatibilidad de tamaño para un mejor reconocimiento por parte de los usuarios.
Android 13 (nivel de API 33) agrega un diálogo de información para el usuario sobre el posicionamiento de la app en formato letterbox en pantalla o que incluya el formato letterbox en el modo de pantalla dividida:
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/enhanced_letterboxing_user_dialog.png?authuser=7&hl=es)
Figura 3: App en formato letterbox con un diálogo de información para el usuario.
Modo de compatibilidad de tamaño
El modo de compatibilidad de tamaño es el formato letterbox que incluye un control de reinicio. El permite a los usuarios reiniciar la app y volver a dibujar la pantalla. Android invoca modo de compatibilidad de tamaño para apps que no pueden cambiar de tamaño. Cuando un la actividad se mueve a un contenedor de pantalla que no es compatible con el dimensiones de la pantalla, el sistema puede modificar la escala de la app para que ocupe la pantalla del dispositivo en al menos una dimensión.
Entre los cambios de configuración del dispositivo que pueden activar el modo de compatibilidad de tamaño, se incluyen los siguientes:
- Rotación del dispositivo
- Plegar o desplegar un dispositivo plegable
- Cambiar entre los modos de visualización de pantalla completa y pantalla dividida
Problema
El modo de compatibilidad de tamaño generalmente se aplica a actividades restringidas en o relación de aspecto, y están configuradas (o determinadas por el sistema) para no puede cambiar de tamaño.
Se considera que tu app puede cambiar de tamaño, por lo que no se establecerá su tamaño. modo de compatibilidad, si cumple con alguno de los siguientes criterios:
- Se puede cambiar el tamaño con
resizeableActivity="true"
. - Admite el modo pantalla en pantalla (PIP).
- Está incorporada.
- ¿Aplica la anulación por app de
FORCE_RESIZE_APP
por el fabricante del dispositivo (se ignoran las propiedades establecidas por la app)
Si tu app no cumple con ninguna de las condiciones, se considerará que no puede cambiar de tamaño y colocarse en el modo de compatibilidad de tamaño.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/size_compatibility_mode_issue.gif?authuser=7&hl=es)
La app que no puede cambiar de tamaño falla en el modo multiventana
Optimización
La app debe admitir todos los tamaños de visualización. Haz que tu app pueda cambiar de tamaño estableciendo
Atributo android:resizeableActivity
de <activity>
o el elemento <application>
en true
manifiesto de la app. Crea diseños responsivos o adaptables para tu app. Para ver más
información, consulta
Cómo brindar compatibilidad con diferentes tamaños de pantalla y Compatibilidad
modo multiventana.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/size_compatibility_mode_optimization.gif?authuser=7&hl=es)
La app funciona en todos los tamaños de ventana
Solución al problema de compatibilidad
Android coloca una app en el modo de compatibilidad de tamaño cuando el sistema determina la de la app en formato letterbox se puede mejorar si se cambia el tamaño de la app para que ocupe ventana de visualización en, al menos, una dimensión. El sistema muestra un control de reinicio que recrea el proceso de la app, la actividad y el dibujo pantalla. Consulta también la Descripción general de los procesos y subprocesos.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/size_compatibility_mode_workaround.gif?authuser=7&hl=es)
Se agrega formato letterbox en orientación horizontal a la app solo con modo vertical; el control de reinicio modifica la escala
Bucles parpadeantes
Cuando una app no admite todas las orientaciones de pantalla, es posible que solicitar nuevas orientaciones cuando se produce un cambio de configuración, lo que crea un bucle infinito que hace que la pantalla parpadee o que la app gire sin fin.
Problema
En Android 12 (nivel de API 31) y versiones posteriores, los fabricantes de dispositivos pueden configurar
que sus dispositivos ignoren las restricciones de orientación especificadas por las apps y, en su lugar,
aplicar modos de compatibilidad. Por ejemplo, un dispositivo plegable podría ignorar un
android:screenOrientation="portrait"
de la actividad
Cuando la actividad se muestra en el tamaño tablet en orientación horizontal del dispositivo,
pantalla interior.
Si se ignoran las restricciones de orientación de una app, esta puede programar
configura su orientación llamando
Activity#setRequestedOrientation()
La llamada
activa el reinicio de una app si esta no controla los cambios de configuración (consulta
Administra los cambios en la configuración). Después del
las restricciones de orientación de la app se vuelven a ignorar, la app
la llamada a setRequestedOrientation()
, la llamada activa un reinicio de la app
en un bucle que se perpetúa.
Otra forma en la que puedes encontrar esto es cuando
orientación natural (la orientación habitual como
determinado por Android) de la pantalla de un dispositivo es horizontal (es decir, las llamadas
Devoluciones de Display#getRotation()
Surface.ROTATION_0
mientras el dispositivo tiene orientación horizontal
relación de aspecto). Históricamente, las apps suponen que Display.getRotation() =
Surface.ROTATION_0
significa que el dispositivo se encuentra en orientación vertical, pero esto no es así.
siempre es así, por ejemplo, en la pantalla interior de algunos dispositivos plegables y
en algunas tablets.
Una app con orientación horizontal en una pantalla interior plegable podría verificar la
rotación de pantalla, recibir un valor de ROTATION_0
, asumir la orientación natural
del dispositivo es vertical y llamar
setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
para volver a configurar el diseño de la app. Después de que se reinicia la app (en modo horizontal
orientación), podría volver a comprobar la rotación de la pantalla, recibir el valor
ROTATION_0
, llamada
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
y
y continuar con el bucle infinito.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/flickering_loops_issue.gif?authuser=7&hl=es)
La app solo con modo horizontal en la pantalla vertical realiza llamadas repetidas a Activity#setRequestedOrientation()
Optimización
Las apps no deben hacer lo siguiente:
- Establece una orientación predeterminada con
Activity#setRequestedOrientation()
en el con el métodoonCreate()
de la actividad porque la solicitud de orientación se puede se activa de forma inesperada por cambios de configuración no controlados - Dar por sentado que la orientación natural del dispositivo (
ROTATION_0
) es vertical - Establecer la orientación en función de indicadores no relacionados con el tamaño actual de la ventana, como
como
Display#getRotation()
, la presencia de unaFoldingFeature
o APIs obsoletas.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/flickering_loops_optimization.gif?authuser=7&hl=es)
La app controla los cambios de configuración, no tiene restricciones de orientación, por lo que no entra a un bucle parpadeante
Solución al problema de compatibilidad
Android ignora las llamadas a Activity#setRequestedOrientation()
de la siguiente manera:
situaciones:
La actividad ya se reinició desde una llamada anterior al método. se habilitó el tratamiento de rotación forzada de compatibilidad con la cámara (consulta Cámara vista previa a continuación).
Los fabricantes de dispositivos pueden aplicar este comportamiento a una app con
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
La actividad realizó más de dos solicitudes de orientación en un segundo, lo que indica que se produjo un bucle. De las dos solicitudes en el bucle, Android usa la que maximice el área de visualización de la app.
Los fabricantes de dispositivos pueden aplicar este comportamiento a una app con
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
Vista previa de cámara
Es posible que la vista previa (o el visor) de la cámara de las apps de cámara no esté alineada o distorsionada. en tablets, laptops y pantallas plegables.
Problema
El Documento de definición de compatibilidad de Android establece que un sensor de imagen de la cámara "SE DEBE orientar para que la dimensión larga de la cámara se alinea con la dimensión larga de la pantalla".
A menudo, las apps suponen que la orientación del dispositivo y del sensor de la cámara son vertical, una suposición razonable en los teléfonos móviles estándar. Sin embargo, la orientación natural de las tablets, las laptops y los sensores de la cámara horizontal. Además, los nuevos factores de forma, como los dispositivos plegables, pueden tener múltiples y varios sensores de cámara en distintas orientaciones.
Iniciar una actividad con una orientación de cámara que la app no espera o cambiar entre diferentes cámaras o pantallas de dispositivos (en dispositivos plegables) puede causar una vista previa de la cámara desalineada o distorsionada.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/camera_preview_issue.png?authuser=7&hl=es)
Vista previa de la cámara desalineada y distorsionada en un plegable de pantalla grande
Optimización
Las apps de cámara deben identificar y administrar correctamente la orientación del dispositivo y la cámara. orientación del sensor para presentar una vista previa de la cámara alineada y ajustada correctamente. Las apps deben calcular la rotación del dispositivo y del sensor, y la pantalla o ventana relación de aspecto y, luego, aplicar los resultados a la vista previa de la cámara. Para obtener información consulta Vista previa de la cámara y Presentación de la cámara Visor.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/camera_preview_optimization.png?authuser=7&hl=es)
La vista previa de la cámara está alineada y ajustada correctamente en todas las orientaciones del dispositivo
Solución al problema de compatibilidad
Un dispositivo se encuentra en orientación natural cuando Display#getRotation()
muestra Surface.ROTATION_0
. El sistema calcula
CameraCharacteristics.SENSOR_ORIENTATION
a partir de la orientación natural del dispositivo. Android alinea la ventana vertical de
con restricción vertical con la orientación natural del dispositivo, que
es lo que espera la mayoría de las apps. Android también recorta la imagen del sensor de la cámara cuando
la orientación del sensor es horizontal y la vista previa de la cámara es vertical. El objetivo específico
Las soluciones alternativas incluyen las siguientes:
Forzar la vista previa de rotación de la cámara para apps con restricción vertical: Apps restringido a la orientación vertical esperan la orientación natural del dispositivo y que la orientación del sensor de la cámara sea vertical. Sin embargo, en Android 12 (nivel de API 31) y versiones posteriores, las apps pueden ejecutarse en varias orientaciones del dispositivo si fabricantes de dispositivos ignoran la especificación de orientación.
Cuando se conecta una app con restricción vertical a la cámara, Android fuerza Rota la app para alinear la ventana vertical de la app con la orientación orientación del dispositivo.
En algunas tablets (consulta dispositivos de referencia), la app la ventana vertical se rota a la pantalla completa vertical para alinearse con la la orientación natural del dispositivo. La app ocupa la pantalla completa después de forzar. y la rotación de claves.
Tablet: Fuerza la rotación de la app solo con orientación vertical.
En la pantalla interior horizontal de los dispositivos plegables (consulta la referencia ), se rotan las actividades que solo están en modo vertical horizontal para que se alinee con la orientación natural desplegada. La app es formato letterbox después de forzar la rotación.
Plegable: Fuerza la rotación de una app solo con orientación vertical. La app también tiene formato letterbox.
Recorte del interior de la cámara frontal: El sensor interior de la cámara frontal en algunos plegables está en orientación horizontal. Además de forzar la rotación del Vista previa de la cámara en la pantalla interior plegable, Android recorta la parte frontal interior (horizontal) de la cámara para que el sensor capture una vista opuesta la orientación del dispositivo.
Forzar la actualización de vistas previas de la cámara: El sistema alterna entre la actividad. métodos
onStop()
yonStart()
(de forma predeterminada) oonPause()
yonResume()
(aplicada por el OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE anulación por app) después de forzar la rotación para garantizar que se muestre la vista previa de la cámara que se muestren correctamente.Ajuste de relación de aspecto: El sistema cambia dinámicamente la relación de aspecto de forzar la rotación de la vista previa de la cámara a una relación de aspecto mínima más alta, lo que y garantiza que se ajuste correctamente la vista previa de la cámara.
Los desarrolladores de apps pueden anular estas soluciones alternativas si las apps controlan la vista previa de la cámara. correctamente. Consulta Anulaciones por app.
APIs que suelen usarse de manera inadecuada
Como Android agregó compatibilidad con funciones como el modo multiventana y como plegables, las APIs heredadas dejaron de estar disponibles y se reemplazaron por APIs actualizadas que funcionan con todos los tamaños de pantalla y formatos de dispositivos factores. Sin embargo, las APIs obsoletas aún están disponibles para versiones compatibilidad.
Algunas APIs de View
se diseñaron para fines especiales que no siempre son correctos
que los desarrolladores comprenden.
Problema
Los desarrolladores siguen usando las APIs de Display
obsoletas y suponen erróneamente que
Las APIs devuelven los límites de la app en lugar de los límites del área de visualización del dispositivo. O los desarrolladores
usan por error APIs de vistas con fines especiales para obtener métricas de visualización generales.
El resultado son errores de cálculo cuando se reposicionan los elementos de la IU después de la ventana de la app.
cambios de tamaño de los eventos, lo que causa problemas de diseño.
APIs de Display obsoletas y que suelen usarse de manera inadecuada:
Para obtener más información, consulta Admite el modo multiventana.
APIs de View que se usan de manera inadecuada:
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/misused_APIs_issue.png?authuser=7&hl=es)
La API obsoleta calcula erróneamente los límites de la app. El contenido de la app desaparece de la pantalla.
Optimización
Nunca dependas del tamaño de la pantalla física para posicionar elementos de la IU. Migra tus
app a APIs en función de WindowMetrics
, incluidas las siguientes
APIs de WindowManager
:
Plataforma:
Jetpack:
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/misused_APIs_optimization.png?authuser=7&hl=es)
La API calcula correctamente las métricas de la ventana de la app
Solución al problema de compatibilidad
Dos anulaciones ajustan las APIs de Display
obsoletas y las APIs de View
que se usan de manera inadecuada en
Devuelve los límites de la app:
ALWAYS_SANDBOX_DISPLAY_APIS
para Display
APIs; OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
para las APIs de View
. ALWAYS_SANDBOX_DISPLAY_APIS
también se aplica de forma predeterminada a
que califican para el modo de compatibilidad de tamaño.
Actividades transparentes
Las actividades transparentes son el resultado de estilos de fondo transparentes, por ejemplo, ejemplo:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
Los temas relacionados con los diálogos, como Theme.MaterialComponents.Dialog
, pueden
incluir estilos que hagan que las actividades sean transparentes.
Las actividades transparentes no abarcan todo el espacio de visualización disponible, lo que hace que son difíciles de administrar porque el área de visualización disponible puede cambiar según cambios de configuración, como rotación, plegado y desplegado del dispositivo, y modo multiventana.
Problema
Una actividad transparente debe cumplir con los límites de la primera actividad opaca debajo de la actividad transparente en la pila de actividades de tareas. Sin embargo, un panel opaco La actividad que inicia un diálogo de permisos puede ser una trampolín (una actividad que inicia otra actividad y luego desaparece); y por lo que el sistema no puede determinar los límites de la actividad disparadora que inició la actividad transparente del diálogo de permisos.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/transparent_activities_issue.png?authuser=7&hl=es)
El diálogo está mal posicionado porque la actividad se inició desde un trampolín
Optimización
Las actividades transparentes heredan sus restricciones del opaco superior. debajo de ellos en la pila de actividades de una tarea. La actividad opaca debe ser disponible durante todo el ciclo de vida de la actividad transparente, desde la actividad la creación hasta su destrucción. Por este motivo, no inicies solicitudes de permisos desde actividades de trampolín.
Si una actividad disparadora inicia una solicitud de permiso, es posible que el usuario ver el diálogo de permisos porque la actividad disparadora antes de que el usuario haya tenido la oportunidad de responder al diálogo, y el las dimensiones y la posición de la actividad del diálogo podrían haberse calculado. incorrectamente.
Las apps siempre deben iniciar solicitudes de permisos desde actividades que permanecen visibles hasta que el usuario toma una decisión respecto del permiso.
Esquinas redondeadas
Una actividad puede ser transparente debido a un estilo que especifica el fondo. debido a que el contenido de la actividad no ocupa el espacio espacio de visualización. Si una actividad transparente ocupa el espacio de visualización disponible, el sistema aplica automáticamente esquinas redondeadas a la actividad cuando se configura para lo hace el fabricante del dispositivo. Pero, si una actividad transparente (como una el cuadro de diálogo de permiso) no ocupa el espacio disponible, depende de ti aplicar o no esquinas redondeadas.
Los diálogos de permisos no ocupan el espacio de visualización disponible porque diseño generalmente usa LayoutParams.WRAP_CONTENT en lugar de LayoutParams.MATCH_PARENT.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/transparent_activities_optimization.png?authuser=7&hl=es)
Diálogo con esquinas redondeadas posicionadas correctamente sobre la actividad de inicio visible
Solución al problema de compatibilidad
Mantener visibles las actividades que inician actividades de diálogo hasta que el usuario respondido al cuadro de diálogo.
El sistema garantiza que una actividad transparente herede todas las restricciones de la primera actividad opaca debajo de la actividad transparente en la pila de actividades incluidas las restricciones relacionadas con lo siguiente:
- Modo de compatibilidad de tamaño
- Orientación
- Relación de aspecto
Juegos de Unity
Los juegos de Unity se ejecutan en modo multiventana o en pantalla completa en Android. Sin embargo, muchos juegos de Unity pierden el foco y dejan de dibujar contenido cuando la app se coloca en modo multiventana.
Problema
Unity agregó un elemento Resizable Window
en Unity 2019.4 para admitir el modo multiventana en Android. Sin embargo,
la implementación inicial no reaccionó al ciclo de vida de la actividad en
modo multiventana correctamente, lo que causa
UnityPlayer para suspender la reproducción cuando la app pierde el foco El reproductor renderizó un
pantalla negra o el último fotograma congelado del juego. El juego se reanudó solo cuando
el usuario presionó la pantalla. Muchas apps que usan el motor de Unity tienen este problema y
renderizar como una ventana negra en el modo multiventana
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/unity_games_issue.gif?authuser=7&hl=es)
El juego pierde el foco en el modo multiventana y se renderiza como una ventana negra
Optimización
Actualiza Unity a la versión 2019.4.40 o una posterior y vuelve a exportar el juego. Mantén la
Se marcó la opción Resizable Window
en
Configuración del reproductor de Android
el juego se detiene cuando no está en primer plano, aunque sea completamente visible
modo multiventana.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/unity_games_optimization.gif?authuser=7&hl=es)
El juego procesa el contenido correctamente en el modo multiventana, incluso cuando no está en foco.
Solución al problema de compatibilidad
Los fabricantes de dispositivos pueden aplicar
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
anulación por app para proporcionar un evento de enfoque falso a una app en
modo multiventana. La anulación permite que la actividad vuelva a dibujar el contenido y
no se oscurezca.
Prueba tu app para detectar problemas de compatibilidad
Para probar tu app y comprender cómo se comporta en diferentes factores de forma, toma los siguientes recursos:
- Transmisión de dispositivos: Te permite probar tu app en dispositivos de producción (incluidos los dispositivos de referencia) alojados en centros de datos de Google, consulta Transmisión de dispositivos Android con la tecnología de Firebase
- Emuladores en Android Studio Hedgehog: Para obtener información sobre cómo crear emuladores para dispositivos de referencia, consulta Cómo crear y administrar dispositivos virtuales
- Emulador de Android Studio al que se le puede cambiar el tamaño: Para obtener información sobre el acceso a la En dispositivos, consulta Cómo ejecutar apps en Android Emulator.
Formato letterbox
Verifica que cada actividad pueda usar todo el espacio de visualización disponible para la app. Primero, declara el siguiente código en tu carpeta de prueba:
Kotlin
fun Activity.isLetterboxed() : Boolean { if (isInMultiWindowMode) return false val wmc = WindowMetricsCalculator.getOrCreate() val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds val isScreenPortrait = maxBounds.height() > maxBounds.width() return if (isScreenPortrait) { currentBounds.height() < maxBounds.height() } else { currentBounds.width() < maxBounds.width() } }
Java
public boolean isLetterboxed(Activity activity) { if (activity.isInMultiWindowMode()) { return false; } WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate(); Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds() Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds(); boolean isScreenPortrait = maxBounds.height() > maxBounds.width(); return (isScreenPortrait) ? currentBounds.height() < maxBounds.height() : currentBounds.width() < maxBounds.width(); }
Ejecuta una prueba para confirmar el comportamiento y asegurarte de que la actividad objetivo no sea formato letterbox:
Kotlin
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertThat(it.isLetterboxed()).isFalse() } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity(activity -> { assertThat(isLetterboxed(activity)).isFalse(); }); } }
Idealmente, ejecuta este tipo de prueba solo hasta que se apruebe y confirme que el estado de tu app ocupan todo el espacio de visualización disponible para la app. Prueba tu app en todos los tipos de dispositivos para garantizar un comportamiento coherente.
Anulaciones por app
Android proporciona anulaciones que cambian el comportamiento configurado de las apps. Para
ejemplo, la anulación FORCE_RESIZE_APP
le indica a la
sistema para omitir el modo de compatibilidad de tamaño y cambiar el tamaño de la app para que se ajuste a la pantalla
dimensiones incluso si resizeableActivity="false"
es
especificadas en el manifiesto de la app.
Los fabricantes de dispositivos aplican anulaciones para determinadas apps (o todas las apps) en dispositivos específicos con pantalla grande. En Android 14 (nivel de API 34) y versiones posteriores, los usuarios puede aplicar anulaciones a las apps en la configuración del dispositivo.
Anulaciones por app de usuario
En Android 14 y versiones posteriores, un menú de configuración permite que los usuarios cambien el aspecto. proporción de apps. Dispositivos con pantalla grande, como la referencia dispositivos implementan el menú.
El menú contiene una lista de todas las apps instaladas en el dispositivo. Los usuarios eligen un después, configura la relación de aspecto de la app en 3:4, 1:1, pantalla completa u otro valor. que configura el fabricante del dispositivo. Los usuarios también pueden restablecer la relación de aspecto a el valor predeterminado de la app, que se especifica en el manifiesto de la app.
Para inhabilitar la anulación de compatibilidad, las apps pueden configurar las siguientes etiquetas PackageManager.Property
:
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
Para inhabilitar la anulación de compatibilidad de la relación de aspecto del usuario, agrega la propiedad. en el manifiesto de tu app y establece el valor en
false
:<application> <property android:name="android.window. PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE" android:value="false" /> </application>
Tu app se excluirá de la lista de apps en la configuración del dispositivo. Usuarios no podrá anular la relación de aspecto de la app.
Establecer la propiedad en
true
no tiene ningún efecto.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
Para inhabilitar la opción de pantalla completa de la compatibilidad de la relación de aspecto del usuario anulación, agrega la propiedad al manifiesto de la app y establece el valor en
false
<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>
La opción de pantalla completa se quita de la lista de opciones de relación de aspecto en configuración del dispositivo. Los usuarios no podrán aplicar la anulación de pantalla completa a tu app.
Establecer esta propiedad en
true
no tiene ningún efecto.
Optimiza tu app para todas las pantallas: No establezcas restricciones de relación de aspecto en tu app. Usa clases de tamaño de ventana para admitir diferentes los diseños en función del espacio de visualización disponible.
Anulaciones por app del fabricante del dispositivo
Los fabricantes de dispositivos aplican anulaciones por app en dispositivos seleccionados. Los dispositivos de referencia pueden aplicar algunas de las anulaciones a un varias apps de forma predeterminada.
Las apps pueden inhabilitar la mayoría de las anulaciones (consulta la sección Por app de anulación a continuación).
Puedes probar tu app con las anulaciones habilitadas o inhabilitadas mediante la función (consulta Herramientas del marco de compatibilidad). Cuando se habilitan, las anulaciones se aplican a toda la app.
También puedes usar Android Debug Bridge (adb) para habilitar o inhabilitar las anulaciones y determinar cuáles se aplican a tu app.
Habilita o inhabilita las anulaciones de la siguiente manera:
adb shell am compat enable/disable <override name/id> <package>
Para los dispositivos de referencia, verifica qué anulaciones se aplican a tu aplicación:
adb shell dumpsys platform_compat | grep <package name>
En la siguiente tabla, se enumeran las anulaciones disponibles junto con la guía sobre cómo optimizar tu app para que no tenga que depender de las anulaciones. Puedes agregar en el manifiesto de la app para inhabilitar algunas anulaciones.
Anulaciones por app | |||
---|---|---|---|
Tipo | Nombre | ID | Descripción |
Capacidad de cambio de tamaño | FORCE_RESIZE_APP | 174042936 | Omite el modo de compatibilidad de tamaño para la app en los cambios de configuración. |
FORCE_NON_RESIZE_APP | 181136395 | Fuerza el modo de compatibilidad de tamaño en la app en los cambios de configuración. | |
Relación de aspecto | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | Anulación de control que debe estar habilitada para aplicar cualquier otra anulación de relación de aspecto. |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | Si se habilita (configuración predeterminada), limita el alcance de la anulación a las actividades que solo usan el modo vertical. | |
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | Cambia la relación de aspecto mínima a 3:2. | |
OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | Cambia la relación de aspecto mínima a 16:9. | |
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | Cambia la relación de aspecto mínima para que se adapte al 50% del tamaño de visualización (o la relación de aspecto de pantalla dividida). | |
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | Inhabilita la anulación de relación de aspecto mínima para que las apps se vean en pantalla completa cuando el dispositivo esté en modo vertical. | |
Orientación | OVERRIDE_ANY_ORIENTATION | 265464455 | Permite anular cualquier orientación. |
OVERRIDE_ANY_ORIENTATION_TO_USER | 310816437 | Anula las restricciones de orientación, cambio de tamaño y relación de aspecto. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | Anula la orientación para que sea vertical cuando una actividad tiene una orientación no definida. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | Anula la orientación para que sea nosensor (usa la orientación natural del dispositivo) cuando una actividad tiene una orientación no definida. |
|
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | Gira 180 grados las apps que solo tienen modo horizontal. | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | Limita el alcance de la anulación de orientación cuando la app está conectada a la cámara. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | Fija la pantalla en orientación natural horizontal cuando una tarea está en pantalla completa (incluso en formato letterbox). | |
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | Ignora las solicitudes de orientación de la app para evitar la rotación de bucles infinitos. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | Ignora las solicitudes de orientación repetidas mientras se reinicia una actividad. Si Android detecta que una app solicita al menos dos orientaciones nuevas en un segundo, el sistema considera que se trata de un bucle infinito de rotación y aplica la anulación. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | Impide el formato letterbox inhabilitando el parámetro de configuración para solicitar que se ignore la solicitud de orientación del fabricante del dispositivo. | |
APIs de Sandbox | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | Impide el cambio del comportamiento de cualquier API de Display. |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | Fuerza las APIs de Display en la app para que se devuelvan los límites. Las APIs de Display muestran límites de área de visualización lógicos, pero, a veces, la app da por sentado que las APIs de Display devuelven los límites de la app, lo que genera problemas con la IU. |
|
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | Fuerza las APIs de View que se usan en la app para que se devuelvan los límites. Las APIs de View muestran límites de área de visualización lógicos, pero, a veces, la app da por sentado que las APIs de View devuelven los límites de la app, lo que genera problemas con la IU. |
|
Compatibilidad con la cámara | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | Desactiva la rotación forzada. De forma predeterminada, todas las apps de cámara con orientación fija se giran de manera forzosa cuando la vista previa de la cámara está abierta. |
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | Quita la actualización forzada predeterminada que se aplica cuando se gira de manera forzosa la vista previa de una cámara. | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | Cambia la actualización forzada a una actualización desde la caché si la vista previa de una cámara se gira de manera forzosa, lo que ayuda a preservar el estado durante esta rotación. De forma predeterminada, Android aplica una actualización forzada cuando se gira la vista previa de la cámara de manera forzosa. La actualización forzada puede causar problemas con apps que pierden el estado o se oscurecen según la forma en que las apps almacenaron en caché su estado anterior. | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | Recorta el búfer de imagen de la cámara frontal interior. Si se inhabilita la anulación, se quita el recorte de la cámara frontal interior y se aumenta el campo visual de la vista previa de la cámara. De forma predeterminada, en algunos dispositivos plegables (consulta dispositivos de referencia), el sistema recorta la vista previa de todas las apps de cámara cuando se usa la cámara frontal interior. | |
Varios | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | Evita que se oscurezca la app cuando pierde el enfoque en el modo de pantalla dividida. La app espera el enfoque antes de dibujar el contenido, lo que puede hacer que se inmovilice o se oscurezca. La anulación permite que Android envíe un evento de enfoque falso a la app para indicarle que vuelva a dibujar contenido. |
FORCE_RESIZE_APP
Fuerza los paquetes a los que se aplica la anulación a que puedan cambiar el tamaño. No cambia si la app se puede poner en modo multiventana, pero permite que para cambiar el tamaño sin ingresar al modo de compatibilidad de tamaño cuando cambie el tamaño de la pantalla.
Cómo las apps pueden obtener el mismo resultado que la anulación
En el manifiesto de la app, configura
el atributo android:resizeableActivity
a true
o, para
admiten el cambio de tamaño mientras inhabilitas el modo multiventana con
android:resizeableActivity=false
, establece android.supports_size_changes
.
marca de metadatos en true
.
Cómo optimizar apps
Usa diseños responsivos o adaptables para permitir que las apps se adapten a todos los tamaños de visualización y relaciones de aspecto. Consulta Cómo brindar compatibilidad con diferentes tamaños de pantalla
Cómo inhabilitar o rechazar la anulación
Establece la marca de propiedad PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
en
false
Marcas de propiedad para ajustar la anulación
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación y hacer que la app pueda cambiar de tamaño:
adb shell am compat enable FORCE_RESIZE_APP <package>
Comando para quitar la anulación:
adb shell am compat disable FORCE_RESIZE_APP <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
FORCE_NON_RESIZE_APP
Fuerza los paquetes a los que se aplica la anulación a que no puedan cambiar de tamaño y ingresar al modo de compatibilidad de tamaño en los cambios de configuración.
Cómo las apps pueden obtener el mismo resultado que la anulación
Configura el atributo android:resizeableActivity
y
Marca de metadatos de android.supports_size_changes
en false
en el manifiesto de la app
y declarar una restricción de orientación o relación de aspecto.
Cómo optimizar apps
Todas las apps que funcionan bien si se les cambia el tamaño deben tener
android:resizeableActivity
o android.supports_size_changes
establecidos en true
.
Se deben mejorar otras apps para que funcionen bien cuando se les cambie el tamaño. Consulta
android:resizeableActivity
Cómo inhabilitar o rechazar la anulación
Establece la marca de propiedad PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
en
false
Marcas de propiedad para ajustar la anulación
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación y hacer que la app no pueda cambiar de tamaño:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
Comando para quitar la anulación:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_MIN_ASPECT_RATIO
El controlador para todas las anulaciones que fuerzan una relación de aspecto mínima determinada.
Cómo las apps pueden obtener el mismo resultado que la anulación
Establece android:minAspectRatio
a nivel de la actividad o la app.
Cómo optimizar apps
No establezcas restricciones de relación de aspecto en tu app. Asegúrate de que tu app sea compatible
diferentes tamaños de pantalla. Cómo usar clases de tamaño de ventana
para admitir diferentes diseños según la cantidad de espacio que tenga tu app en la
en la pantalla. Consulta la API de WindowSizeClass
de Compose.
y Ver la API de WindowSizeClass
.
Cómo inhabilitar o rechazar la anulación
Cómo especificar una restricción de relación de aspecto o configurar la marca de propiedad
De PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
a false
.
Marcas de propiedad para ajustar la anulación
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
android:value="false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
Restringe la configuración de la app que fuerza una relación de aspecto mínima determinada para las actividades.
con orientación solo vertical. Habilitada de forma predeterminada y solo tiene efecto
si OVERRIDE_MIN_ASPECT_RATIO
también está habilitado.
Cómo las apps pueden obtener el mismo resultado que la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Cómo optimizar apps
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Cómo inhabilitar o rechazar la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Marcas de propiedad para ajustar la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
Establece la relación de aspecto mínima de la actividad en un valor medio (3:2).
Cómo las apps pueden obtener el mismo resultado que la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Cómo optimizar apps
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Cómo inhabilitar o rechazar la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Marcas de propiedad para ajustar la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_MIN_ASPECT_RATIO_LARGE
Establece la relación de aspecto mínima de la actividad en un valor alto (16:9).
Cómo las apps pueden obtener el mismo resultado que la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Cómo optimizar apps
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Cómo inhabilitar o rechazar la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Marcas de propiedad para ajustar la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
Habilita el uso de la relación de aspecto de la pantalla dividida. Permite que una aplicación utilice todos los espacio disponible en el modo de pantalla dividida, lo que evita el formato letterbox.
Cómo las apps pueden obtener el mismo resultado que la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Cómo optimizar apps
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Cómo inhabilitar o rechazar la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Marcas de propiedad para ajustar la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
Inhabilita la anulación de relación de aspecto mínima en pantalla completa vertical para usar todo espacio de pantalla disponible.
Cómo las apps pueden obtener el mismo resultado que la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Cómo optimizar apps
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Cómo inhabilitar o rechazar la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Marcas de propiedad para ajustar la anulación
Consulta OVERRIDE_MIN_ASPECT_RATIO.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_ANY_ORIENTATION
Habilita las siguientes anulaciones para anular cualquier orientación:
- ANULAR_UNDEFINED_ORIENTATION_TO_PORTRAIT
- ANULAR_UNDEFINED_ORIENTATION_A_NOSENSOR
- ANULAR_LANZAMIENTO_LANZAMIENTO_ORIENTACIÓN_A_REVERSIÓN_LANZAMIENTO
Cómo las apps pueden obtener el mismo resultado que la anulación
Configura el atributo activity:screenOrientation
del manifiesto.
o usa la API de Activity#setRequestedOrientation()
.
Cómo optimizar apps
Tu app debería admitir todas las orientaciones. Un cambio de orientación es un
cambio de configuración, que se puede manejar de dos maneras: permitiendo que se
el sistema destruye y vuelve a crear la app, o administra los cambios de configuración
tú mismo. Si administras los cambios de configuración por tu cuenta, el estado de la app puede
retenidas mediante ViewModel
. En casos muy limitados, puedes bloquear el
orientación en pantallas pequeñas únicamente, aunque es posible que no se ajuste lo suficiente
lo que le permite al usuario rotar la aplicación según sea necesario. En Android 12L y versiones posteriores,
la configuración del dispositivo puede anular la orientación fija. Para ver más
información sobre el manejo de cambios de configuración y la compatibilidad
orientaciones, consulta Administra los cambios en la configuración
Descripción general de ViewModel y Orientación de la app restringida en
pero no en dispositivos con pantallas grandes.
Cómo inhabilitar o rechazar la anulación
Cómo establecer la marca de propiedad
PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
a false
.
Marcas de propiedad para ajustar la anulación
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
ANULAR_CUALQUIERA_ORIENTACIÓN_AL_USUARIO
Permite que la app ocupe el espacio disponible de la pantalla. Anula cualquier orientación,
el cambio de tamaño y las restricciones de relación de aspecto especificadas en el manifiesto de la app También
ignora cualquier llamada a
Activity#setRequestedOrientation()
Cómo las apps pueden obtener el mismo resultado que la anulación
No establezcas el manifiesto
android:screenOrientation
. o configúralo en"user"
.Configura el manifiesto
android:resizeableActivity
atrue
.En pantallas pequeñas, para admitir el cambio de tamaño de la app mientras se inhabilita el modo multiventana con
android:resizeableActivity=false
, establece el Marca de metadatosandroid.supports_size_changes
entrue
. No establecerminAspectRatio
ymaxAspectRatio
.
Cómo optimizar apps
Habilita tu app para que admita todas las orientaciones. no establezcas un screenOrientation
especificación en el manifiesto de tu app. Admitir el ajuste de tamaño de la app
modo multiventana y todas las relaciones de aspecto de la pantalla estableciendo el
El atributo android:resizeableActivity
del manifiesto de tu app para true
. Consulta
Cómo brindar compatibilidad con diferentes tamaños de pantalla
Cómo inhabilitar o rechazar la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Marcas de propiedad para ajustar la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
Habilita la orientación vertical para todas las actividades del paquete. Salvo que OVERRIDE_ANY_ORIENTATION está habilitado, la anulación se usa solo cuando la actividad no especificó otra orientación fija.
Cómo las apps pueden obtener el mismo resultado que la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Cómo optimizar apps
Consulta OVERRIDE_ANY_ORIENTATION
.
Cómo inhabilitar o rechazar la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Marcas de propiedad para ajustar la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
Habilita la orientación nosensor para todas las actividades de la . A menos que OVERRIDE_ANY_ORIENTATION sea habilitada, la anulación se usa solo cuando no se ha asignado ninguna otra orientación fija especificadas por la actividad.
Cómo las apps pueden obtener el mismo resultado que la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Cómo optimizar apps
Consulta OVERRIDE_ANY_ORIENTATION
.
Cómo inhabilitar o rechazar la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Marcas de propiedad para ajustar la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
Habilita la orientación reverseLandscape para todas las actividades en el paquete. A menos que OVERRIDE_ANY_ORIENTATION sea habilitada, la anulación se usa solo cuando no se ha asignado ninguna otra orientación fija especificadas por la actividad.
Cómo las apps pueden obtener el mismo resultado que la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Cómo optimizar apps
Consulta OVERRIDE_ANY_ORIENTATION
.
Cómo inhabilitar o rechazar la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Marcas de propiedad para ajustar la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
Límites OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT: OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, y ANULAR_LANZAMIENTO_PENSO anulaciones para que se apliquen solo cuando la conexión de la cámara está activa.
Cómo las apps pueden obtener el mismo resultado que la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Cómo optimizar apps
Consulta OVERRIDE_ANY_ORIENTATION
.
Cómo inhabilitar o rechazar la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Marcas de propiedad para ajustar la anulación
Consulta OVERRIDE_ANY_ORIENTATION
.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
Restringe la orientación de la pantalla a la orientación natural horizontal cuando el se cumplan las siguientes condiciones:
- La actividad está en pantalla completa.
- Propiedad del componente de inhabilitación
No se habilitó
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
- El parámetro de configuración del fabricante del dispositivo para ignorar la solicitud de orientación está habilitado para publicidad gráfica
- La orientación natural de la pantalla es horizontal.
Cómo las apps pueden obtener el mismo resultado que la anulación
No aplicable. El problema debería resolverse en la lógica de la aplicación.
Cómo optimizar apps
Consulta OVERRIDE_ANY_ORIENTATION
.
Cómo inhabilitar o rechazar la anulación
Cómo establecer la marca de propiedad
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
a false
.
Marcas de propiedad para ajustar la anulación
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
Habilita la política de compatibilidad que omite la actualización de la orientación de la app en respuesta a la de esta
llamando a Activity#setRequestedOrientation()
cuando la app
se está reiniciando o tiene un tratamiento de compatibilidad con la cámara activo.
Cómo las apps pueden obtener el mismo resultado que la anulación
Establecer marca de propiedad
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
a true
.
Cómo optimizar apps
Consulta OVERRIDE_ANY_ORIENTATION
.
Cómo inhabilitar o rechazar la anulación
Establecer marca de propiedad
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
a false
.
Marcas de propiedad para ajustar la anulación
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
Habilita la política de compatibilidad que ignora la orientación solicitada de una app en
respuesta a la llamada de la app
Activity#setRequestedOrientation()
más de dos veces
en un segundo si una actividad no tiene formato letterbox para una orientación fija.
Cómo las apps pueden obtener el mismo resultado que la anulación
No aplicable. El problema debería resolverse en la lógica de la aplicación.
Cómo optimizar apps
Consulta OVERRIDE_ANY_ORIENTATION
.
Cómo inhabilitar o rechazar la anulación
Establecer marca de propiedad
PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
a
false
Marcas de propiedad para ajustar la anulación
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
Excluye paquetes de comportamiento de solicitud de orientación ignorado que se puede habilitar según los fabricantes de dispositivos para un área de visualización o toda la pantalla.
Cómo las apps pueden obtener el mismo resultado que la anulación
No aplicable. El problema debería resolverse en la lógica de la aplicación.
Cómo optimizar apps
Consulta OVERRIDE_ANY_ORIENTATION
.
Cómo inhabilitar o rechazar la anulación
No se puede rechazar. Inhabilitar la anulación puede ser peligroso si la app no es compatible. con un dispositivo en el que el fabricante ignore la solicitud de orientación parámetro de configuración habilitado. Comunícate con el desarrollador de Android Relations para inhabilitar la anulación.
Marcas de propiedad para ajustar la anulación
No hay marcas de propiedad para esta anulación.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
NEVER_SANDBOX_DISPLAY_APIS
Fuerza los paquetes para que nunca se aplique la zona de pruebas de la API de Display
.
para una actividad del modo de compatibilidad de tamaño o letterbox. Las APIs de Display
continúan proporcionando los límites del área de visualización.
Cómo las apps pueden obtener el mismo resultado que la anulación
Declara actividades cuyo tamaño puede cambiar estableciendo
Atributo android:resizeableActivity
del manifiesto para true
o la marca de metadatos android.supports_size_changes
en true
.
Cómo optimizar apps
Las apps que declaran que se puede cambiar por completo su tamaño nunca deben depender del tamaño de visualización.
para posicionar elementos de la IU. Migra tu app a APIs actualizadas que
Proporcionar WindowMetrics
. Si usas Jetpack Compose, puedes aprovechar la
API de WindowSizeClass
para diseñar la IU según la cantidad de pantalla
el área que la app tiene en la pantalla actual. Consulta
Clases de tamaño de ventana.
Cómo inhabilitar o rechazar la anulación
No se puede rechazar. Migra desde las APIs obsoletas.
Marcas de propiedad para ajustar la anulación
No hay marcas de propiedad para esta anulación.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
Comando para quitar la anulación:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
ALWAYS_SANDBOX_DISPLAY_APIS
Fuerza los paquetes para que siempre tengan aplicada la zona de pruebas de la API de Display
independientemente del modo de renderización en ventanas. Las APIs de Display
siempre proporcionan los límites de la app.
Cómo las apps pueden obtener el mismo resultado que la anulación
Declara que las actividades no pueden cambiar de tamaño estableciendo
el atributo android:resizeableActivity
a false
Marca de metadatos android.supports_size_changes
en false
.
Cómo optimizar apps
Las apps que declaran que su tamaño se puede cambiar por completo nunca deben depender del tamaño de visualización para
posicionar elementos de la IU. Migra tu app de las APIs obsoletas a
APIs actualizadas que proporcionan WindowMetrics
. Consulta
WindowMetricsCalculator
Cómo inhabilitar o rechazar la anulación
No se puede rechazar. Migra desde las APIs obsoletas.
Marcas de propiedad para ajustar la anulación
No hay marcas de propiedad para esta anulación.
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Comando para quitar la anulación:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
Fuerza los paquetes para que realicen una zona de pruebas de las siguientes APIs de View
en los límites de actividad:
Cómo las apps pueden obtener el mismo resultado que la anulación
Resuelve el problema en el código de la aplicación usando APIs que proporcionen los límites de la ventana de la app y las compensaciones relacionadas con ella en lugar de los límites la pantalla del dispositivo y los desplazamientos en relación con la pantalla del dispositivo.
Cómo optimizar apps
Las apps deben usar las APIs de View
, teniendo en cuenta la posibilidad del formato letterbox
y el modo multiventana que se aplican a la app. Consulta
WindowMetricsCalculator
Cómo inhabilitar o rechazar la anulación
Establecer marca de propiedad
PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
a false
.
Marcas de propiedad para ajustar la anulación
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
Inhabilita la rotación forzada. Mejora la experiencia del usuario en algunas apps.
Cómo las apps pueden obtener el mismo resultado que la anulación
Establecer marca de propiedad
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
a false
.
Cómo optimizar apps
No dependas de la orientación almacenada en caché del sensor de la cámara ni de la información del dispositivo. Para guía sobre compatibilidad con cámaras, consulta Presentación del visor de la cámara y asistencia superficies redimensionables en la cámara en tu app.
Cómo inhabilitar o rechazar la anulación
Establecer marca de propiedad
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
a true
.
Marcas de propiedad para ajustar la anulación
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación, que quita la rotación forzada:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Comando para quitar la anulación, que permite que ocurra la rotación forzada:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
Inhabilita la actualización de la actividad después de la rotación forzada. Mejora la experiencia del usuario. cuando la actualización causa la pérdida de estado en las apps.
Cómo las apps pueden obtener el mismo resultado que la anulación
Establecer marca de propiedad
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
a false
.
Cómo optimizar apps
Consulta OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
Cómo inhabilitar o rechazar la anulación
Establecer marca de propiedad
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
a true
.
Marcas de propiedad para ajustar la anulación
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación, que quita la actualización de la actividad:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Comando para quitar la anulación, que permite la actualización de la actividad:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
Hace que los paquetes a los que se aplica realicen la actualización de la actividad con un onResume()
.
→ onPause()
→ Ciclo de onResume()
en lugar de onResume()
→
onStop()
→ onResume()
después de la rotación forzada de la compatibilidad de la cámara.
Cómo las apps pueden obtener el mismo resultado que la anulación
Establecer marca de propiedad
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
a true
.
Cómo optimizar apps
Consulta OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
Cómo inhabilitar o rechazar la anulación
Establecer marca de propiedad
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
a false
.
Marcas de propiedad para ajustar la anulación
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT
Fuerza que la salida de la cámara se recorte a la orientación opuesta al usar el modo vertical la orientación de la cámara no se alinea con la orientación natural del dispositivo. Muchas apps no controlen esta situación y muestren imágenes estiradas.
Cómo las apps pueden obtener el mismo resultado que la anulación
Establecer marca de propiedad
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
a true
.
Cómo optimizar apps
Consulta OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
Cómo inhabilitar o rechazar la anulación
Establecer marca de propiedad
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
a false
.
Marcas de propiedad para ajustar la anulación
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación, que implementa el recorte de la cámara frontal interior:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
Comando para quitar la anulación, que quita el recorte de la cámara frontal interior:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
ANULAR_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION
Impide que las aplicaciones inhabiliten la opción para compartir la pantalla de la aplicación (consulta
Proyección de contenido multimedia). Se implementan cuando las apps hacen un uso inadecuado de la
API de createConfigForDefaultDisplay()
para forzar
capturar en pantalla completa y poner en peligro la privacidad del usuario al exponer el contenido
de las notificaciones, que se capturan con la pantalla completa, pero no con la pantalla de la app
compartir y todas las apps independientemente del modo de renderización en ventanas.
Cómo las apps pueden obtener el mismo resultado que la anulación
Permitir el comportamiento predeterminado de proyección de contenido multimedia (implementado en Android 14, API
nivel 34, con createScreenCaptureIntent()
),
lo que permite a los usuarios decidir si comparten la pantalla completa o una sola app
independientemente del modo de renderización en ventanas. O llama
createScreenCaptureIntent(MediaProjectionConfig)
con un argumento MediaProjectionConfig
devuelto
llamar a createConfigForUserChoice()
.
Cómo optimizar apps
Permite que los usuarios elijan si desean compartir toda la pantalla del dispositivo o una app. durante la proyección de contenido multimedia, que a partir de Android 14 es el comportamiento predeterminado.
Haz que tu app pueda cambiar de tamaño (resizeableActivity="true"
) a
admite el modo multiventana.
Cómo inhabilitar o rechazar la anulación
Debido a la seriedad de la privacidad del usuario, tu app no puede inhabilitarla ni rechazarla. de esta anulación.
Marcas de propiedad para ajustar la anulación
Ninguno
Comandos de adb para probar la anulación
Aplicar la anulación, que cancela la inhabilitación por parte de la app del uso compartido parcial de pantalla (es decir, habilita el uso compartido parcial de la pantalla):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
Para quitar la anulación, que permite que la app inhabilite la pantalla parcial uso compartido:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
Habilita el envío de un enfoque falso a las apps sin enfoque en el modo de pantalla dividida. Algunos los motores de juegos esperan a obtener el enfoque antes de dibujar el contenido de la aplicación; y así el enfoque falso ayuda a las apps a evitar que permanezcan oscurecidas cuando se reanudan y no pero que no lo hagan.
Cómo las apps pueden obtener el mismo resultado que la anulación
Establecer marca de propiedad
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
a
true
Cómo optimizar apps
Puedes evitar este problema si tu app controla múltiples orientaciones y los cambios de configuración. Prepara tu app para pantallas grandes siguiendo la Lineamientos sobre calidad de las apps en pantallas grandes
Si ejecutas el motor de juego de Unity, actualiza a la versión 2019.4.40 o una posterior y
y vuelve a exportar el juego. Mantener la opción Resizable Window
registrado en el reproductor de Android
configuración.
Cómo inhabilitar o rechazar la anulación
Establecer marca de propiedad
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
a
false
Marcas de propiedad para ajustar la anulación
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
Comandos de adb para probar la anulación
Comando para aplicar la anulación:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Comando para quitar la anulación:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Nota: Los comandos aplican o quitan la anulación solo de manera temporal.
Recursos adicionales
- Lineamientos sobre calidad de las apps en pantallas grandes
- Principales lineamientos de calidad de las apps