0

スプラッシュ スクリーンとしてシステム バーのないフル スクリーンを作成しようとしていますが、アプリケーションの起動時にルート レイアウトのサイズを変更する際に問題が発生します。

ルート レイアウトがナビゲーション バーの後ろでサイズ変更され、実際にやりたかったことを画面の最後に移動するため、下部に問題はありません。問題は、ルート レイアウトの上部にあることです。これは、画面の上部に移動しないためです。画面の上部に、ステータス バーを非表示にした後に残る黒い空白があります。

注: minSdkVersion 22 と targetSdkVersion 29 を使用しています。

デモンストレーションの目的で、ルート レイアウトとして Constraint Layout 内の 1 つのアクティビティと、緑色の背景と 2 つのボタンを持つ 1 つの対応する XML レイアウト ファイルを含む単純なコードを使用します。

主な活動:

package com.systemwindowexercise

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        window.navigationBarColor = resources.getColor(R.color.translucent)
        window.statusBarColor = resources.getColor(R.color.translucent)

        window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_FULLSCREEN)

    }

}

アクティビティ_メイン:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/constraint_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_green_light"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

テーマ:

<style name="Theme.SystemWindowExercise" parent="Theme.MaterialComponents.DayNight.NoActionBar">

左側は、システム バーのない黒いスペースで画面に触れる前のアプリですが、サイズ変更されたルート レイアウト (緑色) が正しくありません。右側は、システム バーで画面に触れ、サイズ変更されたルート レイアウトを修正した後のアプリです。

ここに画像の説明を入力

画面を操作する前に、黒いスペースのない全画面表示と、完全にサイズ変更されたルート レイアウトと、スプラッシュ スクリーン用の非表示のシステム バーを備えたアプリが必要です。どうやってやるの?

更新: minSdkVersion 22 と targetSdkVersion 29 を使用しており、Samsung Galaxy A40 (Android 10、API 29) でテストしました。Samsung では常に上部に黒いスペースが表示されますが、ZTE Nubia (API 22) ではすべて正常に動作します。これまでの唯一の解決策は、次のようにデバイス設定を変更することです: Galaxy でフルスクリーン アプリを有効にする方法@SlothCoding がコメントで教えてくれました。

UPDATE2:デバイス設定を変更したくない場合は、画面領域にカメラが組み込まれている電話用のこのコードが必要です。公式には、カットアウト領域にコンテンツを表示するために必要です。

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
    }
4

2 に答える 2