我试图实现边缘到边缘设计以充分利用 Android Q 中的屏幕,但我遇到了一些问题。
我的代码如下:
活动:
<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/Drawer_Main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.main.MainActivity">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/Layout_Coordinator_Main"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutFullscreen="@{true}">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/Toolbar_Main"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorOnSurface"
android:clipChildren="false"
android:outlineAmbientShadowColor="@color/colorShadowColor"
android:outlineSpotShadowColor="@color/colorShadowColor"
android:paddingStart="8dp"
android:paddingEnd="8dp"
app:contentInsetStartWithNavigation="0dp">
...
绑定适配器:
@BindingAdapter("layoutFullscreen")
fun View.bindLayoutFullscreen(previousFullscreen: Boolean, fullscreen: Boolean) {
if (previousFullscreen != fullscreen && fullscreen) {
systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
}
}
v29\colors.xml(仅适用于 Android Q)
<resources>
<!--Set the navigation bar to transparent on Q+ and allow the system to guard against-->
<!--low contrast scenarios.-->
<color name="nav_bar">@android:color/transparent</color>
</resources>
颜色.xml:
<!--Set the navigation bar to transparent on Q+ and allow the system to guard against-->
<!--low contrast scenarios.-->
<color name="nav_bar">@color/colorPrimaryDark</color>
主题.xml
<!-- Status and navigation bar colors -->
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowLightStatusBar">@bool/theme_status_bar_light</item>
<item name="android:navigationBarColor">@color/nav_bar</item>
导航效果很好,但是,我的工具栏与状态栏重叠,如下所示:
我已经尝试过以下方法:
- <item name="android:windowDrawsSystemBarBackgrounds">false</item>
- android:fitsSystemWindows="true"
它仍然不起作用。
编辑
我也试过@Gabriele Mariotti的回答
我在 onCreate() 中添加了以下代码:
val paddingTop = _binding.ToolbarMain.paddingTop
ViewCompat.setOnApplyWindowInsetsListener(_binding.ToolbarMain){v, insets ->
v.updatePadding(top = paddingTop + insets.systemWindowInsetTop)
insets
}
最终结果是这样的:
我仍然丢失了我的材料工具栏的一部分。
有人可以帮帮我吗 ?