博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Material Design 组件之NavigationView
阅读量:6994 次
发布时间:2019-06-27

本文共 2703 字,大约阅读时间需要 9 分钟。

今天来看一下 NavigationView 的使用,NavigationView 是一个标准的导航菜单,其菜单内容由菜单资源文件来填充,NavigationView 一般和 DrawerLayout 一起搭配使用构成抽屉菜单,分别由内容页和菜单页组成。

基本布局

可以直接使用 DrawerLayout 作为根布局,里面依次是内容布局和菜单布局,切记内容布局一定是在菜单布局的前面,可以这样理解菜单划出的时候肯定应该在内容布局之上,如果两者顺序相反,则影响菜单 Item 的点击事件以及菜单的滑动隐藏,当然如果有 ToolBar 等,可以按需添加到内容布局中,也可以 DrawerLayout 外,唯一区别是侧换菜单是否遮挡 ToolBar,基本使用参考如下:

常用属性

下面是 NavigationView 的常用属性,具体如下:

android:layout_gravity="start"
app:itemIconTint="@color/colorPrimary"
app:itemTextColor="@color/colorNormal"
app:itemBackground="@color/colorBackground"
app:menu="@menu/menu_navigation_view"
app:headerLayout="@layout/head_navigation_layout"

文字选中效果

如果美工比较用心会告诉点击时是那种颜色、按下是那种颜色或者是某种效果,此时就需要设置菜单项文字选中效果了,这里选择创建在 color 资源文件的形式来实现文字选中效果了,定义 color 资源文件如下:

然后,设置 NavigationView 的 itemTextColor 属性即可,具体如下:

app:itemTextColor="@color/select_color_navigation"

当然,也可以在代码中设置,具体如下:

//设置菜单项颜色ColorStateList colorStateList = getResources().getColorStateList(R.color.select_color_navigation);navigationView.setItemTextColor(colorStateList);

然后,设置对 NavigationView 菜单项选中的事件监听,具体如下:

navigationView.setNavigationItemSelectedListener(this);

最后,在点击完成要设置该菜单项已被选中,具体如下:

@Overridepublic 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 图标与文字之间的间距,所以我们只要设置:

10dp

至于其他相关的 dimen 值就不一一说明了,这样就修改了 Menu 图标与文字之间的间距。

案例

下面是一个 NavigationView 结合 DrawerLayout 的使用案例,布局如下:

显示效果

下面是显示效果,如下图所示:

NavigationView

最近总结了一下 Material Design 组件的使用,可以选择关注微信公众号:jzman-blog 获取最新更新,可以在公众号回复关键字 MD 获取相关代码链接。

转载于:https://www.cnblogs.com/jzmanu/p/10284774.html

你可能感兴趣的文章
Lifestyle
查看>>
spring+shiro共享session完整小例子
查看>>
GitLab 环境搭建【CentOS7】
查看>>
Python.__init__.py
查看>>
面试题总结(三)、《STL源码剖析》相关面试题总结
查看>>
WebViewCLient too slow to be used
查看>>
多维数据模型
查看>>
ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
查看>>
PPP中的PAP和CHAP的区别
查看>>
基于CentOS5.5的SVN服务器搭建
查看>>
maven使用笔记
查看>>
JBoss配置使项目能在局域网其他机子上访问项目
查看>>
VIO概述 On-Manifold Preintegration for Real-Time Visual--Inertial Odometry
查看>>
CocoaPods升级安装三方库报错
查看>>
SpringBoot整合RabbitMQ实现微服务间的异步消息沟通
查看>>
pku1338 Ugly Numbers
查看>>
程序算法与人生选择 分类: 转载收藏 2013...
查看>>
牛客网校招全国统一模拟笔试(三月场)- Java方向
查看>>
Apache主站点配置
查看>>
[转]蓝牙开发
查看>>