2017-10-27 14 views
18

android:windowIsTranslucenttrueに設定し、android:windowBackgroundを半透明の背景に設定したアクティビティがあります。私はちょうど私のターゲットを変更し、27にSDKのバージョンをコンパイルし、そして今、この活動を立ち上げたとき、私は例外を取得:Android API 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"を取り出してもアプリケーションがクラッシュすることはありませんが、そのように保つことができますようにお願いします。

+3

半透明のアクティビティで方向を選択できるのは意味がありません。あなたの下のアクティビティがそのアクティビティをサポートしていない場合や、自分自身をロックした場合はどうなりますか?それはどのように機能しますか?それが許可された場合、それは抜け穴で働いた。 –

+0

私の使用例は、この半透明のアクティビティが自分のアプリでのみ表示されることです(別のアプリのオーバーレイとしてではありません)。私の主なアクティビティをオーバーレイするSearchアクティビティ、メインアクティビティはどちらもローテーションしない – vanshg

+2

実験をした後、同様の半透明アクティビティからscreenOrientation属性を削除した後も、私のアクティビティ**はまだ回転しません** **それらの背後にあるもの**には、** portrait **値を持つscreenOrientation属性もあります。 – sofakingforever

答えて

8

私も同じ問題に直面しました。 アンドロイド:screenOrientation = "ポートレート" android:screenOrientation = "unspecified"を削除した場合、例外はなくなりました。 そして、フロントアクティビティの向きは、後方のアクティビティの向きに従っているようです。

私はそれについて考えました。 フロントアクティビティがトランスペアレントで、後方アクティビティの向きが異なる場合、 ディスプレイが奇妙になります。 このチェックロジックが追加された理由を理解できます しかし、この問題がDeveloper Preview 8.0.0で発生しなかったのはなぜだろうか。

+0

私はこの回答に同意します - しかし、なぜOreo MR1がうまくいけばOreoを壊すのかという疑問があります。 – ShellDude

+0

は主な活動の上に半透明の活性を有していた。両方の活動は 'android:screenOrientation =" portrait "とマークされました。ターゲットAPI 27を使用してAndroid 8.0を実行するとクラッシュする可能性があります。ターゲットAPI 26、Android 8.1または7のAPI 27では問題は発生しませんでした。 –

9

回避方法はtargetSdk26に戻すことです。

アプリケーションがクラッシュする理由は、このコミットではhereです。

hereが表示されていますが、あなただけではありません。この問題はGoogleに問題として報告されています。修正されましたが、いつ、どのようにリリースされるのかはわかりません。


あなたの半透明の後ろに固定された配向した非半透明の活動がある場合、私はまた、「sofakingforeverは」コメントで言っていることを確認することができ、半透明のは回転しません。したがって、マニフェストからandroid:screenOrientation="portrait"も削除できます。

+0

これは実際の解決策ではありません。誰かがAPI 27をターゲットにしている場合、その理由があります。 –

+1

@HarishVishwakarmaはい、あなたは絶対に正しいです。だから私は "解決策"という言葉を "回避策"に変更しました。 GoogleがGPlayに最新のAPIをターゲットにして新しいAPKをアップロードするよう強制するため、これは永遠ではありません。 – JerabekJakub

0

ありがとう@JerabekJakub。私のテスト結果は - 27を維持し、次の行を削除することもクラッシュを解決することができます。

android:configChanges="orientation" 
android:screenOrientation="portrait" 
+0

configChangesを削除する理由 –

+3

しかし、これは画面の回転を引き起こします。私たちが望むものではありません。 – JerabekJakub

+0

私はJerabekJakubの記述に従って私の鉱山をテストしました。あなたの半透明の後ろに固定された向きの非半透明の活動がある場合、半透明は回転しません。 – flame3

0

API 27の新機能/バグのようです。 しかし、あなたは アンドロイド削除することができます。screenOrientation または アンドロイド:screenOrientation =「未指定」

0

を私は私が得たターゲットバージョン27では

NoActionBarスタイルで、この行を変更することで、この問題を解決しましたこの問題は、私はラインの下に使用することによって解決

<item name="android:windowIsTranslucent">false</item> 
関連する問題