gpt4 book ai didi

Android NavigationDrawer 与状态栏重叠

转载 作者:行者123 更新时间:2023-12-01 15:03:12 26 4
gpt4 key购买 nike

我看到很多关于在导航栏顶部设置半透明状态栏的问题,如下所示:

enter image description here

但我想要实现的是拥有一个非半透明状态栏,并使抽屉导航标题 View 与操作栏高度相同。这适用于前 Lollipop 设备 (API < 21)。但是对于 API 21+,整个抽屉导航只是向上移动并与状态栏重叠,而不是放在状态栏下方。我能想到的唯一解决方法是在 API 21+ 之后的设备的 header View 上手动设置 layout_marginTop。是否有更好的解决方案来为所有设备修复此问题?

API < 21:

enter image description here

API > 21:

enter image description here

样式.xml(v21):

<resources>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
</resources>

抽屉布局:

    <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:fitsSystemWindows="false"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>

我尝试将 fitsSystemWindows 设置为 truefalse。没有变化。

这是我在初始化抽屉导航时的 hack 解决方案(@AkashBhave 也回答了这个问题):

    LinearLayout navigationHeader = (LinearLayout) navigationView.getHeaderView(0);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
// This is make sure navigation header is below status bar
// This only required for devices API >= 21
LinearLayout.LayoutParams layoutParams =
(LinearLayout.LayoutParams) navigationHeader.getLayoutParams();
layoutParams.setMargins(0, getStatusBarHeight(), 0, 0);
navigationHeader.setLayoutParams(layoutParams);
}

最佳答案

确保 fitsSystemWindows 不仅在您的 NavigationView 中而且在您的根 DrawerLayout 中设置为 false元素以及您的任何内容布局。

我在这个问题上挣扎了一段时间,直到我注意到一个 android:fitsSystemWindows="true" ,它在我将它包裹在 DrawerLayout 之前已经设置在我的旧根布局元素中

我删除了所有出现的 android:fitsSystemWindows 并且状态栏也得到了 API 21+ 的尊重。

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<android.support.design.widget.CoordinatorLayout
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"
tools:context=".ui.ImprintActivity">

<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:theme="@style/AppTheme.Toolbar"
app:titleTextAppearance="@style/Toolbar.TitleText"
app:contentInsetStartWithNavigation="0dp"
app:contentInsetStart="0dp"
>

<include layout="@layout/toolbar_logo_small"/>

</android.support.v7.widget.Toolbar>

</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_imprint"/>

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

<android.support.design.widget.NavigationView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
app:headerLayout="@layout/navigation_view_header"
app:menu="@menu/navigation_view_menu"
android:background="@color/primary_light"
/>

</android.support.v4.widget.DrawerLayout>

关于Android NavigationDrawer 与状态栏重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37491093/

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