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