Только полноэкранные непрозрачные действия могут запрашивать ориентацию на Build.VERSION_CODES.O - PullRequest
0 голосов
/ 07 июня 2019

Этот вопрос, чтобы получить больше разъяснений. Я видел этот вопрос и в нем много ответов, но их много, и все немного отличаются.

Вчера я обновил свое приложение и неожиданно получил много сбоев, говоря:

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"

В моем случае у меня есть Activity, и я установил тему в следующих стилях:

<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" в моем манифесте решит эту проблему?

Может ли кто-нибудь также объяснить, почему это происходит?


Я думаю, что стоит упомянуть, что я добавил следующее в «Activity onCreate», непосредственно перед setContentView(R.layout.activity_cam_view); (я не уверен, повлияет ли это на что-нибудь):

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...