前言:话说自从5.0之后,Google为了安卓应用的风格更加统一(之前是holo风格,不过引起的反响不大),开始了Matrail Design的设计风格,咱今天所讲的就是基于Matrail Design设计风格的NavigationView,他的出生就是为了搭配DrawerLayout来使用,这个菜单分为两部分,头部(headerLayout)和尾部(menu),其实这样的效果,我们自己也可以来实现,但是既然Google出来了,我们今天就来探讨一下NavigationView的使用!

-------------------------------------------分割线-------------------------------------------------

使用:还是放在DrawerLayout里面,只是把侧滑栏换成NavigationView,具体看代码:

<?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:id="@+id/drawerlayout"android:layout_width="match_parent"android:layout_height="match_parent"><!--内容布局--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/png01"></LinearLayout><!--侧边栏布局--><android.support.design.widget.NavigationViewandroid:id="@+id/navigation_view"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="start"android:background="#fff"app:headerLayout="@layout/navigation_headerlayout"app:menu="@menu/navigation_menu" /></android.support.v4.widget.DrawerLayout>

其中android:layout_gravity="start"属性,相信大家都很熟悉了,该属性表示左侧滑栏。

app:headerLayout="@layout/navigation_headerlayout",该属性表示头布局。

app:menu="@menu/navigation_menu",该属性表示尾布局。

头布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"android:orientation="vertical"><ImageViewandroid:layout_width="80dp"android:layout_height="80dp"android:src="@mipmap/ic_launcher" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Android" />
</LinearLayout>

尾布局代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/action_gallery"android:icon="@android:drawable/ic_menu_gallery"android:orderInCategory="100"android:title="相册" /><itemandroid:id="@+id/action_details"android:icon="@android:drawable/ic_menu_info_details"android:orderInCategory="100"android:title="详情" /><itemandroid:id="@+id/action_about"android:icon="@android:drawable/ic_menu_help"android:orderInCategory="100"android:title="帮助" /><itemandroid:id="@+id/action_fly"android:icon="@mipmap/ic_launcher"android:orderInCategory="100"android:title="fly" /><itemandroid:id="@+id/action_fly2"android:icon="@mipmap/ic_launcher"android:orderInCategory="100"android:title="fly2" /><itemandroid:id="@+id/action_fly3"android:icon="@mipmap/ic_launcher"android:orderInCategory="100"android:title="fly3" /><itemandroid:id="@+id/action_music"android:icon="@android:drawable/ic_menu_more"android:orderInCategory="100"android:title="音乐"><menu><itemandroid:id="@+id/action_play"android:icon="@android:drawable/ic_media_play"android:title="播放" /><itemandroid:id="@+id/action_pause"android:icon="@android:drawable/ic_media_pause"android:title="暂停" /></menu></item>
</menu>

效果图:

-------------------------------------------分割线-------------------------------------------------

图片显示不正常,默认显示的都是灰色偏黑色,在java中添加如下代码即可:

navigationView.setItemIconTintList(null);

再看下图:

当然了我们也可以设置app:itemIconTint="@color/blue"属性,来更改图片的显示颜色。

设置app:itemBackground="@color/colorAccent"每一个item的背景颜色,app:itemTextColor=""item的背景颜色

-------------------------------------------分割线-------------------------------------------------

分割线:在menu中将相应的item放到一个group中,并给该group取一个id即可,上面给出的有代码。

-------------------------------------------分割线-------------------------------------------------

头部点击事件:

View headerView = navigationView.getHeaderView(0);headerView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "我是头部", Toast.LENGTH_SHORT).show();}});

效果图:

-------------------------------------------分割线-------------------------------------------------

尾部点击事件:

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(MenuItem item) {//在这里处理item的点击事件switch (item.getItemId()) {case R.id.action_gallery:Toast.makeText(MainActivity.this, "我是相册", Toast.LENGTH_SHORT).show();break;}return true;}});

效果图:

-------------------------------------------分割线-------------------------------------------------

ok!以上就是NavigationView的使用方法,敬请期待下节课!

Android开发之DrawerLayout与NavigationView之间不得不说的基友情相关推荐

  1. android之json解析优化,Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

  2. Android开发之2048安卓版

    之前是在eclipse上写的,后面换成了android sudio. 2048游戏的UI整体可以采用线性布局,即LinearLayout,其中嵌套一个线性布局和一个GridLayout,内嵌的线性布局 ...

  3. Android开发之JNI(一)--HelloWorld及遇到的错误解析

    Android开发之JNI(一)--HelloWorld及遇到的错误解析 1.NDK环境搭建 參考http://blog.csdn.net/xiaoliouc/article/details/8705 ...

  4. Android开发之旅:android架构

    引言 通过前面两篇: Android 开发之旅:环境搭建及HelloWorld Android 开发之旅:HelloWorld项目的目录结构 我 们对android有了个大致的了解,知道如何搭建and ...

  5. android md5加密登录,Android开发之MD5加密

    将字符串进行MD5加密,返回加密后的字符串 public static String encode(String password) { try { StringBuffer sb = new Str ...

  6. android中oncreate方法,android开发之onCreate( )方法详解

    这里我们只关注一句话:This is where you should do all of your normal static set up.其中我们只关注normal static, normal ...

  7. Android开发之ViewFlipper

    Android开发之ViewFlipper /* *  Android开发之ViewFlipper *  北京Android俱乐部群:167839253 * Created on: 2012-7-25 ...

  8. Android开发之BroadcastReceiver

    Android开发之BroadcastReceiver BroadcastReceiver介绍 广播的种类 标准广播(Normal Broadcast) 有序广播(Ordered Broadcast) ...

  9. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序   在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...

最新文章

  1. BiLSTM-CRF学习笔记(原理和理解) 维特比
  2. sql根据年月日查询注册数或者和值
  3. 阿里云centos 6.5 32位安装可视化界面的方法
  4. 《研磨设计模式》chap14 迭代器模式(3) 举例
  5. Boost:双图bimap与Boost xpressive的测试程序
  6. 统一返回的json时间格式
  7. 现身说法:实际业务出发分析百亿数据量下的多表查询优化
  8. Java NIO Channel
  9. 【OpenCV 例程200篇】41. 图像的灰度变换(灰度级分层)
  10. 女儿还有三个月就高考了,最近压力大,特别敏感,容易发火怎么办?
  11. 零基础学python还是c语言-入门是不是应该选择C而不是直接学Python?
  12. 解决问题--mysql可以远程通过IP访问,不能通过localhost与127.0.0.1访问
  13. python绘制自定义地图_原来炫酷的可视化地图,用Python就能搞定!
  14. C#、VB.NET与三菱Q02、QJ71E71、L02、LJ71E71、FX3U、FX5U等通讯的DLL及调用源代码
  15. java监控屏幕_Java实现简单屏幕监控
  16. 路由器 刷rom php,路由器刷固件常用命令Openwrt 之mtd/mtd_write烧写固件
  17. 程序员联合开发网 程序员创业指导书
  18. 图书管理系统项目导入
  19. 【SVAC1】SVAC1.0场解码相关分析
  20. 北邮计算机学院4组,北邮信息与通信工程学院导师组介绍(十一)

热门文章

  1. DIY云端情书打印机(基于腾讯定制开发板)
  2. 利用QGIS采集卫星图上的建筑并转成矢量数据
  3. 机器学习基础(一)——线性代数
  4. 操作severlet 基础
  5. linux系统怎么使用
  6. Springboot+Redis+阿里云服务器 Redis是什么?如何配置Redis?怎样配置Redis?如何按装Redis?
  7. Navicat Premium教程:如何使用 Navicat 远程管理数据库?
  8. Scrapy管道爬取图片
  9. 老码农公开!我是这样不花钱开CSDN会员的......
  10. 0. 嵌入式入门学习路线