Android 设计支持库 Navigation-view 自定义

Android Design Support Library Navigation-view Customization

我有几个关于新导航视图的问题。

1) 滚动导航视图会滚动整个视图,但我只想让 header 留在原处,让导航项滚动。

2) 要实现分隔符 b/w 导航项,我可以这样做:

<item
android:id="@+id/navigation_subheader"
android:title="@string/navigation_subheader">
<menu>
    <item
        android:id="@+id/navigation_sub_item_1"
        android:icon="@drawable/ic_android"
        android:title="@string/navigation_sub_item_1"/>
    <item
        android:id="@+id/navigation_sub_item_2"
        android:icon="@drawable/ic_android"
        android:title="@string/navigation_sub_item_2"/>
</menu>
</item>

但是没有subheader就不行了。我试图给它一个空白字符串,但只留下一个垂直空白 space 而不是 subheader。我需要由分隔符分隔但没有 subheaders.

的导航项组

3) 动态操作导航项。在此之前,我曾经使用垂直列表视图作为导航项。我只是将可见性设置为我不想要的任何导航项的可见性。如何动态更改导航项?

1) Scrolling the navigation view scrolls the whole view but I just want the >header to stay at it's place and the navigation item to scroll.

当前NavigationView无法获取。它遵循 Material 准则。如果您想要这种模式,您必须使用自定义视图。

2) To implement dividers b/w navigation items, I can do something like this:

您可以使用标准 NavigationView 定义如下菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:id="@+id/group1" android:checkableBehavior="single" id>
       //items of group1
    </group>

    <group android:id="@+id/group2" android:checkableBehavior="single" id>
       //items of group2
    </group>
</menu>

给每个组一个唯一的 ID 很重要。

3) Manipulating the navigation items dynamically

您可以使用类似的东西:

navigationview.getMenu().findItem(R.id.drawer_item_xxx).setVisible(xxx);

1) 滚动导航视图会滚动整个视图,但我只想让 >header 留在原处,让导航项滚动。

由于 NavigationView 是一个 FrameLayout,我们可以添加一个 ListView 作为子视图,并且不要忘记删除 NavigationView 中的 app:menu 属性,然后您将获得所需的行为。