Я пытаюсь сделать полноэкранный режим без системных панелей в качестве экрана-заставки, но у меня есть некоторые проблемы с изменением размера моего корневого макета при запуске моего приложения.
У меня нет проблем с нижней частью, потому что мой корневой макет изменяет размер за панелью навигации и перемещается в конец экрана, что я действительно хотел сделать. Проблема заключается в верхней части корневого макета, потому что она не идет в верхнюю часть экрана. В верхней части экрана у меня есть черное пустое пространство, которое остается после того, как я скрою строку состояния.
ПРИМЕЧАНИЕ. Я использую minSdkVersion 22 и targetSdkVersion 29.
В демонстрационных целях я буду использовать простой код с одним действием и одним соответствующим 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)
}
}
Activity_main:
<?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 показал мне в комментарии.