只有全屏不透明活动可以在Build.VERSION_CODES.O上请求方向

时间:2019-06-07 04:07:54

标签: java android screen-orientation illegalstateexception

这个问题是为了进一步澄清。我已经看到this个问题,并且有很多答案,但是有很多,而且都略有不同。

昨天我更新了我的应用,突然崩溃了:

java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2858)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2933)
   at android.app.ActivityThread.-wrap11(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1612)
   at android.os.Handler.dispatchMessage(Handler.java:105)
   at android.os.Looper.loop(Looper.java:164)
   at android.app.ActivityThread.main(ActivityThread.java:6710)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)

在上述问题中,人们建议您要么:

  • <item name="android:windowIsTranslucent">true</item>更改为<item name="android:windowIsTranslucent">false</item>
  • android:screenOrientation="portrait"更改为setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  • 或删除android:screenOrientation="portrait"

就我而言,我有一个“活动”,并且已将主题设置为以下样式:

<style name="Theme.Transparent" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>

</style>

在我的清单中

<activity android:name=".camView"
        android:clearTaskOnLaunch="true"
        android:configChanges="orientation|screenSize|keyboardHidden"
        android:label="@string/app_name"
        android:screenOrientation="landscape"
        android:theme="@style/Theme.Transparent">.......//some metadata

我的问题:

可以肯定地说,将<item name="android:windowIsTranslucent">true</item>更改为<item name="android:windowIsTranslucent">false</item>并在清单中保留android:screenOrientation="landscape"可以解决此问题吗?

有人还能详细说明为什么会这样吗?


我认为值得一提的是,我在setContentView(R.layout.activity_cam_view);之前的Activity onCreate中添加了以下内容(我不确定这是否会影响任何事情):

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
    WindowManager.LayoutParams layout = getWindow().getAttributes();
    layout.rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
        getWindow().setAttributes(layout);
}

0 个答案:

没有答案