读第一行代码第12章-2.滑动菜单

在之前介绍过Toolbar的基础之上,现在介绍滑动菜单DrawerLayout,首先我们来修改布局文件:

<?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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
</android.support.v4.widget.DrawerLayout>  

现在一个简易的滑动菜单已经制作好了,但是用户怎么知道我们有滑动菜单这个功能呢?

所以我们就需要在标题栏的最左边加入一个导航按钮,点击按钮也会显示滑动菜单,所以我们需要导入一张导航图片到drawable-xxhdpi目录下。然后修改MainActivity中的代码:

public class MainActivity extends AppCompatActivity {

private DrawerLayout mDrawerLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    mDrawerLayout = findViewById(R.id.drawer_layout);
    ActionBar actionBar = getSupportActionBar();
    if(actionBar != null){
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeAsUpIndicator(R.drawable.navigate);
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.toolbar,menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case android.R.id.home:
            mDrawerLayout.openDrawer(GravityCompat.START);
            break;
        case R.id.Share:
            Toast.makeText(this,"You click Share!",Toast.LENGTH_SHORT).show();
            break;
        case R.id.Upload:
            Toast.makeText(this,"You click Upload!",Toast.LENGTH_SHORT).show();
            break;
        case R.id.Add:
            Toast.makeText(this,"You click Add!",Toast.LENGTH_SHORT).show();
            break;
        case R.id.Delete:
            Toast.makeText(this,"You click Delete!",Toast.LENGTH_SHORT).show();
            break;
        case R.id.Setting:
            Toast.makeText(this,"You click Setting!",Toast.LENGTH_SHORT).show();
            break;
        default:break;
    }
    return true;
}
}  

通过比较不难发现,其实我们就是在昨天的基础之上加了这几行代码:

private DrawerLayout mDrawerLayout;

mDrawerLayout = findViewById(R.id.drawer_layout);
    ActionBar actionBar = getSupportActionBar();
    if(actionBar != null){
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeAsUpIndicator(R.drawable.navigate);
    }

case android.R.id.home:
            mDrawerLayout.openDrawer(GravityCompat.START);
            break;  

上面首先调用findViewById()方法得到了DrawerLayout的实例,然后调用getSupportActionBar()方法得到了ActionBar的实例,再调用setDisplayHomeAsUpEnabled()方法让导航栏显示出来,然后通过setHomeAsUpIndicator()方法为导航栏设置一个图片。

接下来通过对HomeAsUp的点击事件(HomeAsUp按钮的id永远是android.R.id.home),然后调用openDrawer()方法将滑动菜单展示出来。如图:

此时导航图标已经显示出来了,但是滑动菜单还是空的,所以我们需要加点东西进去,首先导入下面两个库:

implementation ‘com.android.support:design:27.1.1‘
implementation ‘de.hdodenhof:circleimageview:2.2.0‘  

第一行的是Design Support库,第二行是开源的CircleImageView,他可以轻松的实现图片圆形化的功能。

在添加之前,我们还需要准备两个东西:menu和headLayoout,把Navigation分成上下两部分,menu用来显示下面具体的菜单项,headLayout用来显示上面的头布局。

先来准备menu,我事先找了五张图片作为按钮的图标,将他们放在drawable-xxhdpi目录下。然后右击 menu文件夹→NEW→Menu→Menu resource file,创建一个nav_menu.xml文件,修改代码如下:

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_call"
        android:icon="@drawable/nav_call"
        android:title="Call"/>
    <item
        android:id="@+id/nav_friends"
        android:icon="@drawable/nav_friends"
        android:title="Friends"/>
    <item
        android:id="@+id/nav_location"
        android:icon="@drawable/nav_location"
        android:title="Location"/>
    <item
        android:id="@+id/nav_mail"
        android:icon="@drawable/nav_mail"
        android:title="Mail"/>
    <item
        android:id="@+id/nav_task"
        android:icon="@drawable/nav_task"
        android:title="Task"/>
</group>
</menu>  

我们首先在

中嵌套了一个

原文地址:https://www.cnblogs.com/zqm-sau/p/9179243.html

时间: 2024-10-10 10:45:10

读第一行代码第12章-2.滑动菜单的相关文章

读第一行代码第12章-1.标题栏

今天学校停电,没意思,特来更新两篇文章,读了第一行代码之后,觉得内容写的非常不错,于是照着书把代码敲了一遍,今天敲的是Toolbar. Toolbar就是标题栏,只不过之前使用的标题栏叫ActionBar,由于ActionBar有很多的局限性,所以改用Toolbar,可以在标题栏中增加许多乐趣. 第一步去掉标题栏: 第二步将v7库中的Toolbar添加到布局中: 这里面Toolbar的高度指定为与原标题栏的高度相同,颜色什么的都在下图中: 接下来在MainActivity中添加下面的两行代码:

《第一行代码》2章 Activity生命周期理解

启动模式 中singleTask  的理解,举个例子,2个activity  firstActivity second Activity, 点一个切换到第二个,再点第一个切换到第一个,这个时候 firstActivity 是reStart, 而不创建,而secondActivity会销毁,因为它在栈的最上边,firstActivity把它替换掉,所以就onDestroy; 只要不再显示就会执行onStop(),没有销毁就会经历onRestart(),onStart()重新变得可见. 比较好的演示

第一行代码Android-------第二章控件部分

一.控件 1.大小 match_parenr:与父布局大小一样 fill_parent:与match_parent一样 wrap_content:控件大小刚好包住里面内容 2.TextView   在界面上显示一段文字 android:text = "显示的文字" android:gravity:"文字对齐方式" //可选值有top.bottom.right.center,可以用|来指定多个值 android:textSize:文字大小 android:textCo

20172327 2017-2018-2 《第一行代码Android》第一章学习总结

学号 2017-2018-2 <第一行代码Android>第一章学习总结 教材学习内容总结 - Android系统架构: 1.Linux内核层 Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动,音频驱动,照相机驱动,蓝牙驱动,Wi-Fi驱动,电源管理等. 2.系统运行底层 - 通过一些C/C++库来为Android系统提供了主要的特性支持 库名 功能 SQLite库 提供数据库的支持 OpenGL/ES库 提供3D绘图支持 Webkit

第一章:开启启程你的第一行代码

前言: 其实我是认为视频比书本学的更快,看书是多么无趣, 有人说培训机构的学生失去了自学能力,的确如此 不管是视频还是资料我认为学会技能使用方法就行了 (还是买了第一行代码,一起学习学习吧!有颜色代表重点内容) 目录: 1.1 了解全貌,Android王国简介 1.1.1 安卓系统架构 1.1.2 安卓已经发布的版本 1.13 安卓应用开发特色 1.2 手把手搭建开发环境 1.2.1准备需要的环境 1.2.2搭建开发环境 1.3 创建你的一个Android项目 1.3.1创建Hello Worl

GitHub从小白到精通(第四章 提交第一行代码)

之前的这篇文章「从0开始学习 GitHub 系列之「Git速成」」相信大家都已经对 Git 的基本操作熟悉了,但是这篇文章只介绍了对本地 Git 仓库的基本操作,今天我就来介绍下如何跟远程仓库一起协作,教你们向 GitHub 上提交你们的第一行代码! 1. SSH 你拥有了一个 GitHub 账号之后,就可以自由的 clone 或者下载其他项目,也可以创建自己的项目,但是你没法提交代码.仔细想想也知道,肯定不可能随意就能提交代码的,如果随意可以提交代码,那么 GitHub 上的项目岂不乱了套了,

《第一行代码——Android》封面诞生记

<第一行代码——Android>已经上市快一个月了,目前销售情况还算良好,也是特别感谢众多朋友的支持.其实一本书如果想要卖的好,除了内容必 须要给力之外,封面的设计也是至关重要的,而本书的封面无疑是在充实的内容之外又披上了一层华丽的外衣.作为作者,其实我的任务就是将内容写好而已,其它 所有相关工作都不是由我负责的.本书封面设计的所有细节都是由陈冰先生一手抓起的,之后他在图灵社区上记录了本书封面的诞生过程.在经过他同意的情况下, 我将这篇文章转到我的博客上,也是让感兴趣的朋友们了解一些不为人知的

历时一年,我的著作《第一行代码——Android》火爆预售!

前言 其实我当初决定开始写博客的想法挺简单的,觉得自己搞技术这么多年了,总应该要留下点什么.既然没能写出什么出色的应用,那至少也要留下点文字分享给大家,以指引在我后面的开发者们,毕竟我也从前辈们的博客那里受惠了很多. 受邀 下定决心之后我就开始了我的博客之旅,令我没想到的是,我写的文章竟然非常受大家的欢迎,短时间内就聚集了大量的人气.更令我没想到的事,在我开始写博客不久之后,人民邮电出版社图灵公司的副总编辑陈冰先生就联系上了我,希望我可以写一本关于Android开发技术的书籍! 陈冰,第一次听到

历时一年,我的著作《第一行代码——Android》已出版!

前言 事实上我当初决定開始写博客的想法挺简单的,认为自己搞技术这么多年了,总应该要留下点什么.既然没能写出什么出色的应用,那至少也要留下点文字分享给大家,以指引在我后面的开发人员们,毕竟我也从前辈们的博客那里受惠了非常多. 受邀 下定决心之后我就開始了我的博客之旅,令我没想到的是,我写的文章居然非常受大家的欢迎,短时间内就聚集了大量的人气.更令我没想到的事,在我開始写博客不久之后,人民邮电出版社图灵公司的副总编辑陈冰先生就联系上了我,希望我能够写一本关于Android开发技术的书籍! 陈冰,第一