Android Support Design库之DrawerLayout和NavigationView

侧滑菜单可以很好的利用有限的屏幕空间来加载更多的内容,在DrawerLayout还没有出现之前都是使用SlidinglMenu来实现的,但是效果并不是很好所以今天我们就来用最新DrawerLayout和NavigationView来实现侧滑菜单
1.如果使用的是Android Studio的用户就有福利了,只需几部变可快速实现,在创建项目的时候选择带侧滑菜单的模版,在这里我们抱着学习的心态所以就来手写实现了。
2.添加degisn库的支持
compile 'com.android.support:design:23.4.0'
3.看一下一键创建的效果图
修改后的效果图(个人还是比较喜欢这种,也是费了很大劲才改好)
4.布局引入控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:fitsSystemWindows="true"
    android:orientation="vertical"
    tools:context="com.example.drawlayout.MainActivity">
    <!--  app:popupTheme 弹出菜单的样式-->
    <!--  app:theme ToolBar的样式-->
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/ToolbarPopupTheme"
        app:theme="@style/ToolBarTheme" />

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:openDrawer="start">

        <include layout="@layout/content_main" />

        <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:headerLayout="@layout/nav_header_main"
            app:menu="@menu/activity_main_drawer" />
    </android.support.v4.widget.DrawerLayout>
</LinearLayout>

5.NavigationView的属性
app:headerLayout=""//添加头部布局,就是效果图蓝色部分
app:menu=""//添加底部的一些菜单
//设置头部布局
navigationView.addHeaderView();
//添加菜单
navigationView.inflateMenu();
6.获取头部布局的事件
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        //使用java代码添加头部布局,那么布局中我们就要删除app:headerLayout=""
        View headView = getLayoutInflater().inflate(R.layout.nav_header_main, null);
        navigationView.addHeaderView(headView);
        navigationView.setNavigationItemSelectedListener(this);
        ImageView imageView = (ImageView) headView.findViewById(R.id.imageView);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "点击了头像", Toast.LENGTH_SHORT).show();
            }
        });
7.自定义ToolBar的样式
 <!--toolbar标题文字颜色-->
    <style name="ToolBarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
        <item name="android:textColorPrimary">@android:color/white</item>
    </style>
    <!-- toolbar弹出菜单样式 -->
    <style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat">
        <item name="android:colorBackground">@android:color/white</item>
        <item name="android:textColorPrimary">@android:color/black</item>
    </style>
8.实现NavigationView.OnNavigationItemSelectedListener来获取侧滑菜单Item的点击事件
@SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.nav_camera:
                Toast.makeText(this, "点击了设置import", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_gallery:
                Toast.makeText(this, "点击了设置Gallery", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_slideshow:
                break;
            case R.id.nav_manage:
                break;
            case R.id.nav_share:
                break;
            case R.id.nav_send:
                break;
        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code-Porter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值