NavigationView

Google在5.0之后推出了NavitationView,就是我们左边滑出来的那个菜单。这个菜单整体上分为两部分,上面一部分叫做HeaderLayout,下面的那些点击项都是menu,这样的效果如果我们要自己写肯定也能写出来,但是没有必要,既然Google提供了这个控件,那我们就来看看这个控件要怎么用吧。

常用API:

  1. app:headerLayout=”@layout/header_layout” 引用一个头布局文件
  2. app:menu=”@menu/main” 引用一个menu作为下面的点击项
  3. app:itemBackground=”@color/colorAccent” 设置每一个item的背景颜色
  4. app:itemTextColor=”” 设置item的字体颜色
  5. app:itemIconTint=”@color/blue” 设置item的图标颜色
  6. setItemIconTintList 设置item的图标颜色
  7. setNavigationItemSelectedListener item点击监听
  8. getHeaderView 获取头布局

和普通的侧拉菜单制作方式一样,首先所有的东西还是都放在一个DrawerLayout中(如果你对DrawerLayout的使用还不熟悉,请参考这篇文章使用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"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:context="org.mobiletrain.drawerlayout.MainActivity">  
    <LinearLayout  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:orientation="vertical">  
        <TextView  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="主页面"/>  
    </LinearLayout>  
    <android.support.design.widget.NavigationView  
        android:id="@+id/navigation_view"  
        android:layout_width="wrap_content"  
        android:layout_height="match_parent"  
        android:layout_gravity="left"  
        android:fitsSystemWindows="true"  
        app:headerLayout="@layout/header_layout"  
        app:menu="@menu/main"></android.support.design.widget.NavigationView>  
</android.support.v4.widget.DrawerLayout>  

头布局文件:

<?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="200dp"  
              android:orientation="vertical">  
    <ImageView  
        android:id="@+id/iv"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:scaleType="centerCrop"  
        android:src="@drawable/p1"/>  
</LinearLayout>  
<?xml version="1.0" encoding="utf-8"?>  
<menu xmlns:android="http://schemas.android.com/apk/res/android">  
    <item  
        android:id="@+id/favorite"  
        android:icon="@mipmap/ic_launcher"  
        android:title="收藏"/>  
    <item  
        android:id="@+id/wallet"  
        android:icon="@mipmap/ic_launcher"  
        android:title="钱包"/>  
    <item  
        android:id="@+id/photo"  
        android:icon="@mipmap/ic_launcher"  
        android:title="相册"/>  
    <item  
        android:id="@+id/file"  
        android:icon="@mipmap/ic_launcher"  
        android:title="文件"/>  
</menu>  

效果:

修改menu图片颜色:

两种方式:
1.在布局文件中添加app:itemIconTint=”@color/blue”属性,表示设置图片的颜色全都为蓝色,效果如下:

2.第一种解决方案会让所有的图片以一种颜色来显示,如果我想让图片就是显示他本身颜色该怎么办呢?在Java 代码中调用如下方法:setItemIconTintList

NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_view);  
navigationView.setItemIconTintList(null);  

效果:

在NavigationView的item之间添加上一条分隔线

只需要在menu中将相应的item**放到一个group中**,并给该group取一个id即可,代码如下:

<?xml version="1.0" encoding="utf-8"?>  
<menu xmlns:android="http://schemas.android.com/apk/res/android">  
    <group android:id="@+id/g1">  
        <item  
            android:id="@+id/favorite"  
            android:icon="@mipmap/ic_launcher"  
            android:title="收藏"/>  
        <item  
            android:id="@+id/wallet"  
            android:icon="@mipmap/ic_launcher"  
            android:title="钱包"/>  
    </group>  
    <group android:id="@+id/g2">  
        <item  
            android:id="@+id/photo"  
            android:icon="@mipmap/ic_launcher"  
            android:title="相册"/>  
    </group>  
    <item  
        android:id="@+id/file"  
        android:icon="@mipmap/ic_launcher"  
        android:title="文件"/>  
</menu>  

效果:

NavigationView中的事件处理主要是两个方面,一个头部的点击事件,还有一个是itemView的点击事件,下面我们分别来看看:

1.头部点击事件

处理头部点击事件,我们需要先获得到头部控件getHeaderView,在Java代码中我们可以通过下面的方式获得头部控件

//获取头布局文件  
        View headerView = navigationView.getHeaderView(0);  
然后通过调用headerView中的findViewById方法来查找到头部的控件,设置点击事件即可。
2.item点击事件
navigationView.setNavigationItemSelectedListener(
    new NavigationView.OnNavigationItemSelectedListener() {  
    @Override  
    public boolean onNavigationItemSelected(MenuItem item) {  
        //在这里处理item的点击事件  
        return true;  
    }  
});  

引用:
Android5.0之NavigationView的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值