質問
ビジネスニーズにより、アプリケーションは没入型インターフェイスを構成する必要がありますが、フルスクリーンを設定すると、特殊な形状の画面に対する従来のフルスクリーン設定モードは無効になります。
解決
**Android P バージョンには、layoutInDisplayCutoutMode
没入型設定用のパラメータが用意されています。layoutInDisplayCutoutMode
**いくつかの属性設定:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
:ノッチがシステムバーに完全に含まれている場合にのみ、ノッチ領域までウィンドウを拡張できます。それ以外の場合、ウィンドウはノッチ領域と重ならないようにレイアウトされます。LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
: ウィンドウを短辺エッジの前髪領域まで拡張できるようにします。LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
:窓をノッチ領域まで延長することはできません。LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
: ウィンドウをすべての画面端のノッチ領域に拡張できるようにします。
shortEdges
プロジェクトでモードを選択し、コードを直接入力します
public final class ImmersiveUtils {
private ImmersiveUtils() {
}
/**
* 设置沉浸式模式
*/
public static void setImmersiveMode(Activity activity) {
Window window = activity.getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
WindowManager.LayoutParams lp = window.getAttributes();
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
window.setAttributes(lp);
} else {
window.requestFeature(Window.FEATURE_NO_TITLE);
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
final View decorView = window.getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
window.setStatusBarColor(Color.TRANSPARENT);
}
}
Activity
メソッドにonCreate()
メソッドを追加
ImmersiveUtils.setImmersiveMode(this);
補充する
実際のテスト中に、特殊な形状の画面を備えた一部のハイエンド モデルの起動ページでは、上記の方法で設定した後でも黒いステータス バーが表示されることがわかりました(魔法のような!!!)。
解決策:
メソッドの設定と同時に対応するテーマを設定すると問題は解決します。詳細は次のとおりです。
<style name="AppTheme" parent="@style/Theme.AppCompat.DayNight.NoActionBar">
<item name="android:windowFullscreen">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>