java - screenorientation - Bloquear la orientación de la pantalla cuando se dirige a Android API 27 con una actividad no opaca
manejando la rotación de pantalla en android studio (6)
Resolví estos problemas cambiando esta línea en los estilos NoActionBar
En la versión objetivo 27 solo obtuve este problema y lo resolví usando la línea de abajo
<item name="android:windowIsTranslucent">false</item>
Tengo una actividad que tiene android:windowIsTranslucent
establecido en true
y android:windowBackground
configurado en un fondo translúcido. Acabo de cambiar mi objetivo y compilar la versión sdk en 27, y recibo una excepción al iniciar esta actividad ahora:
java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
Como se trata de un nuevo SDK, todavía no hay nada en línea sobre él (y parece ser el resultado de esta línea de código: https://android.googlesource.com/platform/frameworks/base.git/+/master/core/java/android/app/Activity.java#987 )
¿Hay alguna forma de evitar esto? La aplicación no falla si saco android:screenOrientation="portrait"
de mi manifiesto para esta actividad, pero me gustaría poder mantenerlo así.
Gracias @JerabekJakub. El resultado de mi prueba: conservar sdk 27 y eliminar las siguientes líneas también puede resolver el bloqueo.
android:configChanges="orientation"
android:screenOrientation="portrait"
La solución consiste en volver a establecer targetSdk
en 26
.
La razón por la cual su aplicación se bloquea está here en este compromiso.
Como puede ver here , no es el único: este comportamiento se ha notificado a Google como un problema. Se ha solucionado, pero no sabemos cómo ni cuándo se lanzará.
También puedo confirmar lo que dice "sofakingforever" en los comentarios, si hay actividad no translúcida con orientación fija detrás de su translúcido, el translúcido no girará. Así que puedes simplemente eliminar android:screenOrientation="portrait"
del manifiesto también.
Lo que hice fue eliminar cualquier propiedad screenOrientation del manifiesto y agregarlo a mi BaseActivity (desde donde se extienden todas mis actividades), este código
if(!(this instanceof TranslucentActivity)){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
La actividad translúcida tendrá la orientación de la actividad detrás.
También me enfrenté al mismo problema. Como otros dijeron, si eliminé android: screenOrientation = "portrait" o lo reemplacé con android: screenOrientation = "no especificado" , entonces la excepción desapareció. Y parece que la orientación de la actividad frontal sigue la orientación de la actividad detrás.
He pensado en ello. Si la actividad frontal es transparente y la orientación de la actividad detrás es diferente, la pantalla se vuelve extraña. Entonces, puedo entender por qué se agregó esta lógica de verificación Sin embargo, me pregunto por qué este problema no se produjo en Developer Preview 8.0.0.
parece que es una nueva característica / error en API 27. Sin embargo, puedes eliminar android: screenOrientation O android: screenOrientation = "no especificado"