在 DrawerLayout 中滚动时 header 后面的项目列表
List of items behind header when scrolling in DrawerLayout
有人可以帮我解决这个问题吗?我不明白为什么向下滚动时我的项目列表在 DrawerLayout 的 header 后面。
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/activity_MainActivity"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#6b6b6b"
android:fitsSystemWindows="true"
android:theme="@style/NavigationTheme"
app:headerLayout="@layout/format_appdrawerheader"
app:itemBackground="@drawable/nav_view_item_background"
app:itemTextColor="@drawable/nav_view_item_textcolor"
app:menu="@menu/category_menu">
<include layout="@layout/format_appdrawerheader" />
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
感谢您的帮助
编辑:配图会更容易理解。
所以,当我的应用程序启动时,我的 NavigationView 看起来像那样。颜色较深的部分是header,颜色较浅的部分是用菜单制作的列表。
向下滚动时,只有较轻的部分在移动(这正是我想要的),但它在 header 下方滑动。因此,如果我像在第二张图片(红色框)中那样单击 header 中的空白 space,它会选择后面的项目,在本例中为 "Item 1".
编辑2
图片很有帮助。
您可以尝试将下一行添加到 format_appdrawerheader.xml:
的顶部
android:clickable="true"
它应该捕获 header 中的点击事件,防止它继续到 header 后面的视图。
如果您使用 Android Studio 中的默认导航抽屉 Activity,下面我将展示放置该行的位置。您可能需要根据您的应用对其进行定制。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/side_nav_bar"
android:gravity="bottom"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:clickable="true">
...
注意最后一行
希望对您有所帮助。请告诉我。
编辑
另一个解决方案是删除这一行:
<include layout="@layout/format_appdrawerheader" />
它已经被引用了几行:
app:headerLayout="@layout/format_appdrawerheader"
原回答
我还没有测试过,但根据您的描述判断,您可能需要将 NoActionBar 主题添加到您的 styles.xml 和 AndroidManifest.xml.
styles.xml:
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
AndroidManifest.xml:
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
请告诉我这是否有帮助,或者如果您 运行 出错。我不知道您是如何设置 MainActivity.java 的。如果您 运行 陷入与 ActionBar 相关的 NullPointerException,则必须对您的项目进行额外的修改。如果您在 Android Studio 中开始一个新项目,您可以查看默认 NavigationDrawer Activity 中的代码。除了 styles.xml 和 AndroidManifest.xml 之外,您还可以查看 MainActivity.java 中工具栏的引用方式以及 app_bar_main.xml 的设置方式。
有人可以帮我解决这个问题吗?我不明白为什么向下滚动时我的项目列表在 DrawerLayout 的 header 后面。
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/activity_MainActivity"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#6b6b6b"
android:fitsSystemWindows="true"
android:theme="@style/NavigationTheme"
app:headerLayout="@layout/format_appdrawerheader"
app:itemBackground="@drawable/nav_view_item_background"
app:itemTextColor="@drawable/nav_view_item_textcolor"
app:menu="@menu/category_menu">
<include layout="@layout/format_appdrawerheader" />
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
感谢您的帮助
编辑:配图会更容易理解。
所以,当我的应用程序启动时,我的 NavigationView 看起来像那样。颜色较深的部分是header,颜色较浅的部分是用菜单制作的列表。 向下滚动时,只有较轻的部分在移动(这正是我想要的),但它在 header 下方滑动。因此,如果我像在第二张图片(红色框)中那样单击 header 中的空白 space,它会选择后面的项目,在本例中为 "Item 1".
编辑2
图片很有帮助。
您可以尝试将下一行添加到 format_appdrawerheader.xml:
的顶部android:clickable="true"
它应该捕获 header 中的点击事件,防止它继续到 header 后面的视图。
如果您使用 Android Studio 中的默认导航抽屉 Activity,下面我将展示放置该行的位置。您可能需要根据您的应用对其进行定制。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/side_nav_bar"
android:gravity="bottom"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:clickable="true">
...
注意最后一行
希望对您有所帮助。请告诉我。
编辑
另一个解决方案是删除这一行:
<include layout="@layout/format_appdrawerheader" />
它已经被引用了几行:
app:headerLayout="@layout/format_appdrawerheader"
原回答
我还没有测试过,但根据您的描述判断,您可能需要将 NoActionBar 主题添加到您的 styles.xml 和 AndroidManifest.xml.
styles.xml:
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
AndroidManifest.xml:
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
请告诉我这是否有帮助,或者如果您 运行 出错。我不知道您是如何设置 MainActivity.java 的。如果您 运行 陷入与 ActionBar 相关的 NullPointerException,则必须对您的项目进行额外的修改。如果您在 Android Studio 中开始一个新项目,您可以查看默认 NavigationDrawer Activity 中的代码。除了 styles.xml 和 AndroidManifest.xml 之外,您还可以查看 MainActivity.java 中工具栏的引用方式以及 app_bar_main.xml 的设置方式。