Material Design组件之NavigationView
原文首发于微信公众号:jzman-blog,欢迎关注交流!
Material Design 系列文章:
- Material Design组件之FloatingActionButton
- Material Design组件之AppBarLayout
- Material Design组件之CollapsingToolbarLayout
今天来看一下 NavigationView 的使用,NavigationView 是一个标准的导航菜单,其菜单内容由菜单资源文件来填充,NavigationView 一般和 DrawerLayout 一起搭配使用构成抽屉菜单,分别由内容页和菜单页组成。主要内容如下:
- 基本布局
- 常用属性
- 文字选中效果
- 图标与文字间距
- 案例
- 显示效果
基本布局
可以直接使用 DrawerLayout 作为根布局,里面依次是内容布局和菜单布局,切记内容布局一定是在菜单布局的前面,可以这样理解菜单划出的时候肯定应该在内容布局之上,如果两者顺序相反,则影响菜单 Item 的点击事件以及菜单的滑动隐藏,当然如果有 ToolBar 等,可以按需添加到内容布局中,也可以 DrawerLayout 外,唯一区别是侧换菜单是否遮挡 ToolBar,基本使用参考如下:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/drawer_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:fitsSystemWindows="true"><!--内容 --><!--菜单--><android.support.design.widget.NavigationViewandroid:id="@+id/navigation"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="start"app:menu="@menu/my_navigation_items" /></android.support.v4.widget.DrawerLayout>
复制代码
常用属性
下面是 NavigationView 的常用属性,具体如下:
<!--菜单弹出方向-->
android:layout_gravity="start"
<!--菜单图标渲染的颜色-->
app:itemIconTint="@color/colorPrimary"
<!--菜单文字的颜色-->
app:itemTextColor="@color/colorNormal"
<!--菜单项背景颜色(组之间有间隔)-->
app:itemBackground="@color/colorBackground"
<!--菜单项-->
app:menu="@menu/menu_navigation_view"
<!--NavigationView的头部布局-->
app:headerLayout="@layout/head_navigation_layout"
复制代码
文字选中效果
如果美工比较用心会告诉点击时是那种颜色、按下是那种颜色或者是某种效果,此时就需要设置菜单项文字选中效果了,这里选择创建在 color 资源文件的形式来实现文字选中效果了,定义 color 资源文件如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><!--按下--><item android:color="@color/colorPress" android:state_pressed="true"/><!--选中--><item android:color="@color/colorCheck" android:state_checked="true"/><!--默认--><item android:color="@color/colorNormal"/>
</selector>
复制代码
然后,设置 NavigationView 的 itemTextColor 属性即可,具体如下:
<!--设置菜单项颜色-->
app:itemTextColor="@color/select_color_navigation"
复制代码
当然,也可以在代码中设置,具体如下:
//设置菜单项颜色
ColorStateList colorStateList = getResources().getColorStateList(R.color.select_color_navigation);
navigationView.setItemTextColor(colorStateList);
复制代码
然后,设置对 NavigationView 菜单项选中的事件监听,具体如下:
navigationView.setNavigationItemSelectedListener(this);
复制代码
最后,在点击完成要设置该菜单项已被选中,具体如下:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {switch (item.getItemId()){case R.id.menu1:Toast.makeText(this,"menu1",Toast.LENGTH_SHORT).show();break;//...}//设置菜单项选中item.setCheckable(true);//关闭Drawer
// navDrawLayout.closeDrawers();return true;
}
复制代码
图标与文字间距
使用 NavigationView 之后发现,菜单图标与菜单文字之间有一定的间距,看着有点宽,有一点强迫症必须稍微修改小一点,根据之前修改 FloatingActionButton 大小的经验,翻一下源码找设置这个间距的位置,查看 NavigationView 源码,最终在 NavigationMenuPresenter 中找到相关的 dimen 值,然后顺藤摸瓜找到与 Navigation 相关的几个 dimen 值,具体如下:
public static final int design_navigation_elevation = 0x7f060064;
public static final int design_navigation_icon_padding = 0x7f060065;
public static final int design_navigation_icon_size = 0x7f060066;
public static final int design_navigation_max_width = 0x7f060067;
public static final int design_navigation_padding_bottom = 0x7f060068;
public static final int design_navigation_separator_vertical_padding = 0x7f060069;
复制代码
此时,在项目的 dimens 文件夹中创建名称相同的值覆盖即可,这里是修改 Menu 图标与文字之间的间距,所以我们只要设置:
<!--修改NavigationView菜单图标与文字之间的间距-->
<dimen name="design_navigation_icon_padding" tools:override="true">10dp</dimen>
复制代码
至于其他相关的 dimen 值就不一一说明了,这样就修改了 Menu 图标与文字之间的间距。
案例
下面是一个 NavigationView 结合 DrawerLayout 的使用案例,布局如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns: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:orientation="vertical"><!--ToolBar--><android.support.v7.widget.Toolbarandroid:id="@+id/navToolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="@color/colorPrimary" /><android.support.v4.widget.DrawerLayoutandroid:id="@+id/navDrawLayout"android:layout_width="match_parent"android:layout_height="match_parent"><!--内容--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="@string/app_name"android:textSize="18sp" /></LinearLayout><!--菜单--><android.support.design.widget.NavigationViewandroid:id="@+id/navigationView"android:layout_width="200dp"android:layout_height="match_parent"android:layout_gravity="start"app:headerLayout="@layout/head_navigation_layout"app:itemIconTint="@color/colorPrimary"app:itemTextColor="@color/select_color_navigation"app:menu="@menu/menu_navigation_view" /></android.support.v4.widget.DrawerLayout></LinearLayout>复制代码
显示效果
下面是显示效果,如下图所示:
最近总结了一下 Material Design 组件的使用,可以选择关注微信公众号:jzman-blog 获取最新更新,可以在公众号回复关键字 MD 获取相关代码链接。
转载于:https://juejin.im/post/5cdaea0d6fb9a031ef63d999
Material Design组件之NavigationView相关推荐
- Android Design Support Library 中控件的使用简单介绍(一)介绍 在这个 Lib 中主要包含了 8 个新的 material design 组件!最低支持 Android
介绍 在这个 Lib 中主要包含了 8 个新的 material design 组件!最低支持 Android 2.1 . 这些组件在我看来就是对 Github中最近比较火的 android 组件进行 ...
- Material Design 组件之 CollapsingToolbarLayout
CollapsingToolbarLayout 主要用于实现一个可折叠的标题栏,一般作为 AppBarLayout 的子 View 来使用,下面总结一下 CollapsingToolbarLayout ...
- Flutter 入门学习(五)— Material Design风格组件
文章目录 1. 概述 2. App结构和导航组件 2.1 MaterialApp(应用组件) 2.1.1 设置主页 2.1.2 路由处理 2.1.3 自定义主题 2.2 Scaffold(脚手架组件) ...
- Material Design 开发利器:Android Design Support Library 介绍
Material Design 开发利器:Android Design Support Library 介绍 本文翻译自著名博客 Android Developers,原作者是 Ian Lake,点击 ...
- Google将Material Design带到CSS、HTML与JavaScript上
Google Material Design Lite(MDL)旨在将Material Design感官带到网站上.Material Design是一种视觉语言,是Android的标准,同时也是Goo ...
- Vue2.0 的 Material Design UI 组件库 Muse-UI
Muse-UI 基于 Vue2.0 的 Material Design UI 组件库 安装 npm install muse-ui --save 使用 import Vue from 'vue' im ...
- 开启Fluter基础之旅二-------Future再论、常用组件、Material Design风格组件学习
Future再论: 这里在继续往下学习之前,先来看一下Dart语言关于Event-Queue和Microtask Queue需要注意的一个小点,这个在之前https://www.cnblogs.com ...
- 开启Fluter基础之旅三-------Material Design风格组件、Cupertino风格组件、Flutter页面布局篇...
Material Design风格组件: 继续接着上一次https://www.cnblogs.com/webor2006/p/12545701.html的Material Design进行学习. A ...
- Material Design Lite组件之徽章
1.介绍 Material Design Lite(MDL)徽章组件是一个屏幕上的通知元素.徽章由一个小圆圈组成,通常包含数字或其他字符,这些圆圈出现在另一个物体附近.徽章既可以是通知者,也可以是与对 ...
最新文章
- java 画笔粗细_用JAVA做个画笔,有画笔和橡皮功能就行。越简单越好
- 智能视觉组参赛总结及体会- 西安邮电大学 - AI小布丁
- js 获取域名_确定你会使用JS操作Url吗?
- 《x86汇编语言:从实模式到保护模式》读书笔记之后记
- oracle排序使用,很多中函数,不同的效果
- mysql function select 赋值_MySql 进阶
- insert with special ID
- Tensorflow 入门手册(代码与原理释义)
- bzoj1012: [JSOI2008]最大数maxnumber [单调队列]
- some ubuntu shell commands
- 一篇Word论文的字体格式是什么?
- ChineseWiki︱百万中文维基百科词条下载与整理
- 专项审计有哪些?专项审计报告包含哪些内容?
- duang!各位期待的傻猴更新稳定版来了~
- Java OOP 异常
- eclipse 下载和安装教程(初学者,2022最新版)
- 基于逻辑回归(Logistic Regression)的糖尿病视网膜病变(Diabetic Retinopathy)检测
- 2022 年 best 大数据认证:康奈尔大学,Intellipaat,SAS, USDI, Cloudera CCA175 Hadoop
- js验证银行卡号,并自动识别银行信息。js验证手机码。js验证数字
- 邢台市工业机器人集成商_十大优秀工业机器人系统集成商分析
热门文章
- 吴恩达机器学习(八)偏差与方差
- 2018.12.17-dtoj-1170-最长公共子串
- python用户界面画图_通过海龟绘图学习Python-01
- linux系统里route -n不起作用,Linux系统中的route解析
- [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
- JSP 文件上传下载系列之一[基本方式上传文件]
- 四张照片合成一张怎么弄_我在朋友圈发了这张照片后,所有人都求问教程
- centos 怎样显示metric_centos7系列问题
- webstorm护眼绿柔主题分享(JetBrains都可用)
- oracle中pga指什么,oracle中pga内存分配原则