在 Android 中为 Navigation Drawer 添加一节分隔符

Add one section separator for Navigation Drawer in Android

我有一个像这张图片一样的导航抽屉。我想添加一个节分隔符。这看起来很简单,但我在网上找不到任何对我的案例有用的东西。

- 在Express下面加一个换行符

在我的信息下方添加换行符

        <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="Express">
    <menu>
        <group
            android:id="@+id/me"
            android:checkableBehavior="single">
            <item
                android:id="@+id/nav_balance_transfer"
                android:icon="@mipmap/icon_wallet_transfer"
                android:title="Balance Transfer" />

            <item
                android:id="@+id/nav_load_money"
                android:icon="@mipmap/icon_load_money"
                android:title="Load Money" />
            <item
                android:id="@+id/nav_report"
                android:icon="@mipmap/icon_history"
                android:title="Report" />
        </group>
    </menu>
</item>
<item android:title="My Information">
    <menu>

        <group
            android:id="@+id/menu_nav_temp_gid"
            android:checkableBehavior="none">
            <item
                android:id="@+id/nav_profile"
                android:icon="@mipmap/icon_profile"
                android:title="My Account" />
            <item
                android:id="@+id/nav_changePassword"
                android:icon="@mipmap/icon_change"
                android:title="Change Password" />
            <item
                android:id="@+id/nav_ViewUser"
                android:icon="@mipmap/ic_view_user"
                android:title="View User" />
            <item
                android:id="@+id/nav_addUser"
                android:icon="@mipmap/icon_adduser"
                android:title="Add User" />
            <item
                android:id="@+id/nav_addScheme"
                android:icon="@mipmap/icon_add_scheme"
                android:title="Add Scheme" />

            <item
                android:id="@+id/nav_logout"
                android:icon="@mipmap/icon_logout"
                android:title="Log Out" />

        </group>
    </menu>
</item>

我已经完成了这段代码 如果我将 express 和我的信息放在一个单独的组中而不是填充

建议我如何实现这个..

Here is your Solution Do like this

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

        <group>
                <item
                    android:title="Express">
                </item>
        </group>

    <menu>

        <group android:checkableBehavior="single">
            <item
                android:id="@+id/nav_camera"
                android:icon="@drawable/ic_menu_camera"
                android:title="Import" />
            <item
                android:id="@+id/nav_gallery"
                android:icon="@drawable/ic_menu_gallery"
                android:title="Gallery" />
            <item
                android:id="@+id/nav_slideshow"
                android:icon="@drawable/ic_menu_slideshow"
                android:title="Slideshow" />
            <item
                android:id="@+id/nav_manage"
                android:icon="@drawable/ic_menu_manage"
                android:title="Tools" />
         </group>

    </menu>

    <item android:title="Communicate">
        <menu>
            <item
                android:id="@+id/nav_share"
                android:icon="@drawable/ic_menu_share"
                android:title="Share" />
            <item
                android:id="@+id/nav_send"
                android:icon="@drawable/ic_menu_send"
                android:title="Send" />
        </menu>
    </item>

</menu>

您应该在菜单 XML 文件中创建具有不同 ID 的组,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group
        android:id="@+id/menu_section_1"
        android:checkableBehavior="single">
        <item
            android:id="@+id/drawer_item_1"
            android:icon="@drawable/ic_item_1"
            android:title="@string/drawer_item_1"/>
        <item
            android:id="@+id/drawer_item_2"
            android:icon="@drawable/ic_item_2"
            android:title="@string/drawer_item_2"/>
    </group>
    <group
        android:id="@+id/menu_section_2"
        android:checkableBehavior="none">
        <item
            android:id="@+id/drawer_item_3"
            android:icon="@drawable/ic_item_3"
            android:title="@string/drawer_item_3" >
        </item>
    </group>
</menu>

试试这个....

    <group>
    <item android:title="Express">
    </item>
    </group>



            <group
                android:id="@+id/grpid1"
                android:checkableBehavior="single">
                <item
                    android:id="@+id/nav_balance_transfer"
                    android:icon="@mipmap/ic_launcher"
                    android:title="Balance Transfer" />

                <item
                    android:id="@+id/nav_load_money"
                    android:icon="@mipmap/ic_launcher"
                    android:title="Load Money" />
                <item
                    android:id="@+id/nav_report"
                    android:icon="@mipmap/ic_launcher"
                    android:title="Report" />
            </group>



    <group>
    <item android:title="My Information">



        </item>
    </group>


            <group
                android:id="@+id/grpid2"
                android:checkableBehavior="none">
                <item
                    android:id="@+id/nav_profile"
                    android:icon="@mipmap/ic_launcher"
                    android:title="My Account" />
                <item
                    android:id="@+id/nav_changePassword"
                    android:icon="@mipmap/ic_launcher"
                    android:title="Change Password" />
                <item
                    android:id="@+id/nav_ViewUser"
                    android:icon="@mipmap/ic_launcher"
                    android:title="View User" />
                <item
                    android:id="@+id/nav_addUser"
                    android:icon="@mipmap/ic_launcher"
                    android:title="Add User" />
                <item
                    android:id="@+id/nav_addScheme"
                    android:icon="@mipmap/ic_launcher"
                    android:title="Add Scheme" />

                <item
                    android:id="@+id/nav_logout"
                    android:icon="@mipmap/ic_launcher"
                    android:title="Log Out" />

            </group>


    </menu>

看来您只需要为 group 标签提供唯一 ID。

<group android:id="@+id/ids">
    <!-- Divider will appear above this item -->
    <item ... />
</group>

好的@Tufan 我也可以解决这个问题

这样做...将这些行添加到您的 dimen.xml

<dimen name="design_navigation_padding_top_default" tools:override="true">0dp</dimen>
<dimen name="design_navigation_separator_vertical_padding" tools:override="true">0dp</dimen>
<dimen name="design_navigation_padding_bottom" tools:override="true">0dp</dimen>

dimen.xml

<resources
    xmlns:tools="http://schemas.android.com/tools"
    >

    <dimen name="design_navigation_padding_top_default" tools:override="true">0dp</dimen>
    <dimen name="design_navigation_separator_vertical_padding" tools:override="true">0dp</dimen>
    <dimen name="design_navigation_padding_bottom" tools:override="true">0dp</dimen>
    <dimen name="navigation_separator_vertical_padding">0dp</dimen>

</resources>

New Screenshot remove padding by add this..

这是活动布局。您应该将其他内容放在框架布局中。

<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_layout"
android:fitsSystemWindows="true">

<!-- your content layout -->
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/content_frame">



</FrameLayout>

<android.support.design.widget.NavigationView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/nav_header"
    android:id="@+id/navigation_view"
    app:menu="@menu/drawer_view"/>

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

下面是我在 res/menu 目录中的 drawer_view 文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group>
        <item
            android:title="Label1"
            android:id="@+id/asd">
        </item>
   </group>


    <group
        android:checkableBehavior="single"
        android:id="@+id/nav_file_navigation">
        <item
            android:id="@+id/nav_all_files"
            android:icon="@drawable/all"
            android:title="All Files" />
        <item
            android:id="@+id/nav_memory_card"
            android:icon="@drawable/sd_card"
            android:title="Memory Card"
            />
        <item
            android:id="@+id/nav_pictures"
            android:icon="@drawable/picture"
            android:title="Pictures" />
        <item
            android:id="@+id/nav_videos"
            android:icon="@drawable/play_button"
            android:title="Video" />
        <item
            android:id="@+id/nav_music"
            android:icon="@drawable/music_player"
            android:title="Music" />
        <item
            android:id="@+id/nav_documents"
            android:icon="@drawable/document"
            android:title="Documents" />
        <item
            android:id="@+id/nav_download"
            android:icon="@drawable/download"
            android:title="Downloads"
            />
    </group>

    <group>
        <item
            android:title="Label1"
            android:id="@+id/asd">
        </item>
   </group>


     <group
         android:checkableBehavior="single"
         android:id="@+id/nav_others"
         >
        <item
            android:id="@+id/nav_certificate"
            android:icon="@drawable/certificate"
            android:title="Set Certificate"/>
         <item
             android:id="@+id/nav_email"
             android:icon="@drawable/mail_gray"
             android:title="Email"
             />
        <item
            android:id="@+id/nav_setting"
            android:icon="@drawable/settings"
            android:title="Settings"/>
        <item
            android:id="@+id/nav_help"
            android:icon="@drawable/help"
            android:title="Help" />
        <item
            android:id="@+id/nav_log_out"
            android:icon="@drawable/log_out"
            android:title="Log Out" />

     </group>
</menu>

这是一个导航抽屉header:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="140dp"
    android:background="@color/lightGray"
    android:theme="@style/ThemeOverlay.AppCompat.Dark"
    android:orientation="vertical"
    android:gravity="center_vertical">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/navigation_header_image"
        android:background="@color/lightGray"
        android:src="@drawable/drawer_header"
        android:padding="16dp"
        />


</FrameLayout>

在 activity 的 on create() 方法中

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    mNavigationView = (NavigationView) findViewById(R.id.navigation_view);
    mNavigationView.setItemIconTintList(null);
    mNavigationView.setNavigationItemSelectedListener(new      NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            item.setChecked(true);
            onNavigationItemClicked(item);
            return true;
        }
    });

在创建之前声明这个变量。

public NavigationView mNavigationView;
public DrawerLayout mDrawerLayout;

onNavigationClicked() 方法是

public void onNavigationItemClicked(MenuItem item){
 //Do whatever you want to do with item. You can get its title and depending
 //on the title you can do what you want.

 mDrawerLayout.closeDrawers();
}

如何删除 <Menu> 并将分隔项用组包裹。

来自这里:

<item android:title="Express">
<menu>
    <group
        android:id="@+id/me"
        android:checkableBehavior="single">
        <item
            android:id="@+id/nav_balance_transfer"
            android:icon="@mipmap/icon_wallet_transfer"
            android:title="Balance Transfer" />

        <item
            android:id="@+id/nav_load_money"
            android:icon="@mipmap/icon_load_money"
            android:title="Load Money" />
        <item
            android:id="@+id/nav_report"
            android:icon="@mipmap/icon_history"
            android:title="Report" />
    </group>
</menu>

对此

    <group android:id="@+id/id1">
       <item android:title="Express"
        android:enabled="false">
    </group>
    <group
        android:id="@+id/me"
        android:checkableBehavior="single">
        <item
            android:id="@+id/nav_balance_transfer"
            android:icon="@mipmap/icon_wallet_transfer"
            android:title="Balance Transfer" />

        <item
            android:id="@+id/nav_load_money"
            android:icon="@mipmap/icon_load_money"
            android:title="Load Money" />
        <item
            android:id="@+id/nav_report"
            android:icon="@mipmap/icon_history"
            android:title="Report" />
    </group>

不要忘记设置用 android:enabled="false" 包裹的项目以移除触摸效果。

来源:This Answer