Android:windowIsTranslucent
がtrue
に設定され、Android:windowBackground
が半透明の背景に設定されているアクティビティがあります。ターゲットを変更してSDKバージョンを27にコンパイルしたところ、このアクティビティを今すぐ起動すると例外が発生します。
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"
を取り出してもアプリはクラッシュしませんが、そのように保ちたいと思います。
私も同じ問題に直面しました。他の人が言ったように、Android:screenOrientation = "portrait"を削除するかAndroid:screenOrientation = "unspecified"で上書きすると、例外はなくなりました。そして、前のアクティビティの方向は後ろのアクティビティの方向に従うようです。
私はそれについて考えました。前面のアクティビティが透明で、背面のアクティビティの向きが異なる場合、表示がおかしくなります。そのため、このチェックロジックが追加された理由を理解できますが、Developer Preview 8.0.0でこの問題が発生しなかったのはなぜでしょうか。
私のために働いた解決策は削除しています
Android:screenOrientation="portrait"
すべてのフルスクリーン透明アクティビティから
<item name="Android:windowIsTranslucent">true</item>
また、Oreoの下で方向が正しく機能することを確認するために、これをアクティビティのonCreate()に追加しました。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// This activity is a fullscreen transparent activity, so after Oreo Android doesn't allow fullscreen
// transparent activities to specify Android:screenOrientation="portrait" in the manifest. It will pick up
// from the background activity. But for below Oreo we should make sure that requested orientation is portrait.
if (VERSION.SDK_INT < VERSION_CODES.O) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
ターゲットバージョン27でのみこの問題が発生し、以下の行を使用して解決しました
<item name="Android:windowIsTranslucent">false</item>
だから、私はマニフェストからscreenOrientationプロパティを削除し、BaseActivity(すべてのアクティビティが拡張される)に追加しました、このコード
if(!(this instanceof TranslucentActivity)){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
TranslucentActivityには、背後のアクティビティからの方向があります。
aPI 27の新しい機能/バグのようです。ただし、Android:screenOrientationまたはAndroid:screenOrientation = "unspecified"を削除できます
ありがとう@JerabekJakub。私のテスト結果-SDK 27を保持し、次の行を削除してもクラッシュを解決できます。
Android:configChanges="orientation"
Android:screenOrientation="portrait"