В приложении у меня есть status bar
и скрыть the bottom control bar
.
В прошлый раз я использовал marginTop="20dp"
, чтобы соответствовать нижней строке строки состояния.Тем не менее, я проверил с Galaxy 10
И строка состояния очень отличается.Итак, Мое приложение выглядело странно, И решило проблему с применением этого атрибута в корневом представлении.
fitsSystemWindows = "true"
Однако, теперь у меня есть другая проблема, что bottom control bar
скрыт, но есть пустое место какбольшой как нижняя панель управления после применения атрибута.Есть ли способ уместить экран, на котором отображается строка состояния и нет нижней панели управления (пока я ее скрываю)?
(желтый - MainActivityи черный - это фрагмент)
Розовая часть должна достигать дна, но не может достигнуть из-за этого атрибута.
Я проверил, и я думаю, что это просто происходит с kitkat
и Q
.
Когда я удаляю этот атрибут, он работает с нижней панелью управления, но не со строкой состояния ...
, это мой файл макета.
<FrameLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.main.MainActivity">
<fragment
...
/>
...
</FrameLayout>
Итак, я использую только один Activity
, у которого много Fragments
.
И вот что использует Activity:
private fun hideStatusBar() {
DisplayUtil.hideStatusBar(this)
this?.window?.decorView?.setOnSystemUiVisibilityChangeListener { visibility ->
if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
DisplayUtil.hideStatusBar(this)
}
}
}
object DisplayUtil {
fun hideStatusBar(activity: Activity?) {
activity?.window?.decorView?.systemUiVisibility = (
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY // hide status bar and nav bar after a short delay, or if the user interacts with the middle of the screen
)
}
}