1

我试图实现边缘到边缘设计以充分利用 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
    }

最终结果是这样的:

问题 2

我仍然丢失了我的材料工具栏的一部分。

有人可以帮帮我吗 ?

4

2 回答 2

3

你必须处理WindowInsets你的AppBarLayout(或者Toolbar如果你不使用它)。

就像是:

   val appbar : AppBarLayout = findViewById(R.id.appbar)
   val appbarTopPadding = appbar.paddingTop

   ViewCompat.setOnApplyWindowInsetsListener(appbar) { v, insets ->
         v.updatePadding(top = appbarTopPadding + insets.systemWindowInsets.top)
         insets
   }

和:

在此处输入图像描述

没有:

在此处输入图像描述

你可以在这里找到更多信息

于 2020-06-20T19:33:30.717 回答
0

主题.xml

<item name="android:windowTranslucentStatus">false</item>
于 2021-02-28T14:25:48.333 回答