NavigationView_分离视图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liangjingkanji/article/details/53728526

NavigationView

这是在 Android 6.0 推出的新控件, 目的是配合DrawerLayout 方便的实现 Google的Material Design设计规范, 简单的说就是将一个菜单和一个布局组成一个新的布局NavigationView.

演示


添加依赖

这是Google提供的design包下的控件, 后面的版本号可以建议跟随最新的sdk版本号

compile 'com.android.support:design:25.0.1'

定义布局

在布局文件中添加android.support.design.widget.NavigationView控件

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/drawer_main"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

      // 这是主页面的内容
    </LinearLayout>
    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content" // 这里写dp值也可, 推荐wrap_content
        android:layout_height="match_parent"
        android:layout_gravity="start"  // 代表这是侧滑抽屉, 详情看draerLayout使用
        app:headerLayout="@layout/drawer_header" // 导入一个布局文件
        app:menu="@menu/drawer_main_menu"/> // 导入一个菜单文件
</android.support.v4.widget.DrawerLayout>

NaigationView里面包括两个重要的属性app:headerLayoutapp:menu

**NavigationView由两部分组成:**Header和menu

引入的两个XMl

drawer_header
这里没有代码补全提示请自己手动输入, android:layout_height 这个属性值填 match_parent 或者wrap_content都是包裹内容, 建议使用Google默认的160dp

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:gravity="center"
              android:layout_width="match_parent"
              android:background="@color/colorPrimary"
              android:layout_height="160dp">
<ImageView
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:src="@mipmap/ic_launcher"/>
</LinearLayout>

drawer_main_menu

这里给菜单设置的图标都会变成Google默认的灰色,这里我也会介绍怎么修改颜色

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:icon="@mipmap/ic_launcher"
        android:title="演示"/>
    <item
        android:icon="@mipmap/ic_launcher"
        android:title="演示"/>
    <item
        android:icon="@mipmap/ic_launcher"
        android:title="演示"/>
</menu>

菜单样式


通过NavigationView的属性修改菜单样式, 并不提供修改单个菜单选项的颜色, 因为这并不符合MaterialDesign设计规范, 如果有需要直接自定义就行了

修改菜单的文字颜色

app:itemTextColor="@color/colorPrimary"

修改菜单的图标颜色

app:itemIconTint="@color/colorPrimary"

监听器


监听点击事件

        mNavView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {      
                // 设置菜单条目为被点击状态
                item.setCheckable(true);
                // 关闭抽屉
                mDrawerMain.closeDrawer(GravityCompat.START);
               // 默认返回false, 如返回true, 更新UI为被点击状态
                return true;
            }
        });

onNavigationItemSelected的返回值不同, 被点击后的状态也不一样,

返回false

返回true

猜你喜欢

转载自blog.csdn.net/liangjingkanji/article/details/53728526
今日推荐