gpt4 book ai didi

android - fitsSystemWindows 在 NavigationView 中的自定义布局中不起作用

转载 作者:太空狗 更新时间:2023-10-29 15:59:41 34 4
gpt4 key购买 nike

我在 NavigationView 中有一个自定义 View 。问题是无论采用何种组合,fitsSystemWindows 都无法在 NavigationView 中工作。并且抽屉中的顶部项目始终位于半透明状态栏之后。

main_layout

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:openDrawer="start">

<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/colorPrimaryBottomBar"
android:fitsSystemWindows="true">
<include layout="@layout/navigation_main_drawer" />
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>

navigation_main_drawer

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:fillViewport="true"
android:fitsSystemWindows="true"
android:paddingBottom="@dimen/default_margin">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/default_margin"
android:fitsSystemWindows="true"
android:orientation="vertical">

<LinearLayout
...
</LinearLayout>

<View
... />

<LinearLayout
...
</LinearLayout>

<View
... />

<LinearLayout
...
</LinearLayout>

<View
... />

</LinearLayout>
</ScrollView>
</android.support.design.widget.CoordinatorLayout>

最佳答案

那么,如果我没理解错的话,您希望您的自定义 View 获得必要的填充,这样它的内容就不会被状态栏剪掉吗?

如果是这样那么你需要设置

android:fitsSystemWindows="true"

在你的根DrawerLayout中,然后设置

android:fitsSystemWindows="false"

在您的 NavigationView 组件中。请注意,这是错误的,而不是正确的:)

推理:

Google 设计的新 NavigationView 组件使用“fitsSystemWindows”属性来自定义其内容与状态栏的关联方式。请注意,这里的“自定义”是关键词,因为这个特定组件的硬编码行为是它的内容应该与状态栏重叠并到达屏幕顶部,而状态栏本身应该是透明的以允许抽屉的内容被看穿。这被指定为新 Material 设计的一部分,如 https://material.io/guidelines/patterns/navigation-drawer.html 中所示。 .

因此,禁用此行为的唯一方法是告诉 NavigationView 发出 fitsSystemWindow 属性的信号,并且仅在包含所有其他 View 的根 DrawerLayout 中设置它,这将执行您的操作会期望并适本地填充其所有 subview 。

请注意,this comment 也证实了这一推理来自 Android 开发人员 Ian Lake 的博客文章中谈到了这个特定的属性。

附言

我还会删除 navigation_main_drawer XML 中所有子元素中对“fitsSystemWindows”属性的所有提及,以防万一,尽管它可能没有任何效果......

关于android - fitsSystemWindows 在 NavigationView 中的自定义布局中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39943556/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com