定位到具有不透明活动的 Android API 27 时锁定屏幕方向

2022-09-01 05:54:36

我有一个活动,该活动已设置为半透明背景。我刚刚更改了我的目标并编译sdk版本到27,现在启动此活动时遇到异常:android:windowIsTranslucenttrueandroid:windowBackground

java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation

由于这是一个新的sdk,所以网上还没有关于它的任何信息(它似乎是由这行代码产生的:https://android.googlesource.com/platform/frameworks/base.git/+/master/core/java/android/app/Activity.java#987 )

有没有办法解决这个问题?如果我从清单中取出此活动,应用不会崩溃,但我希望能够保持这种状态。android:screenOrientation="portrait"


答案 1

我也遇到了同样的问题。正如其他人所说,如果我删除了android:screenOrientation=“portrait”或用android:screenOrientation=“unspecified”覆盖它,那么例外就消失了。而且,似乎前方活动的方向遵循后方活动的方向。

我想了想。如果前面的活动是透明的,而后面的活动的方向不同,则显示会变得奇怪。因此,我可以理解为什么添加此检查逻辑但是,我想知道为什么在开发人员预览版8.0.0中没有发生此问题。


答案 2

解决方法是设置回 。targetSdk26

应用程序崩溃的原因在此提交中。

正如您在此处看到的,您不是唯一一个 - 此行为已作为问题报告给Google。它已被修复,但我们不知道如何以及何时发布。


我还可以确认“sofakingforever”在评论中所说的内容,如果半透明后面有固定方向的非半透明活动,半透明不会旋转。因此,您也可以从清单中删除。android:screenOrientation="portrait"


推荐