android toolbar源码解析,深入理解Android 5.0中的Toolbar

环境说明:

Android Studio 2.0

V7包版本:com.android.support:appcompat-v7:23.4.0

compileSdkVersion 23

buildToolsVersion "24.0.0"

Toolbar 引入使用

XML布局中加入:

android:id="@+id/toolbar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"/>

主题改为隐藏ActionBar:

Theme.AppCompat.Light.NoActionBar

Activity代码中加入:

setContentView(R.layout.activity_main);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

setSupportActionBar(toolbar);

此时运行效果:

835e5bd5c60571f2f64c0b286dec83c0.png

添加背景色

android:background="@color/colorPrimary"

此时运行效果:

3efd75b656e651029f1cf5bde4b880d1.png

基本属性设置

android:id="@+id/toolbar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"

android:background="@color/colorPrimary"

app:navigationIcon="@mipmap/title_bar_back"//左侧图标

app:subtitle="子标题"

app:subtitleTextColor="#fff" //标题颜色

app:title="标题"

app:titleTextColor="#fff"/> //子标题颜色

运行效果:

cee8e2f71b95a308634fa6f33a316946.png

添加选项菜单

第一步创建菜单文件

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

tools:context=".MainActivity">

android:id="@+id/action_settings"

android:icon="@mipmap/ic_launcher"

android:orderInCategory="100"

android:title="settings"

app:showAsAction="never"/>

android:id="@+id/action_share"

android:icon="@mipmap/ic_action_share"

android:orderInCategory="100"

android:title="settings"

app:showAsAction="ifRoom"/>

android:id="@+id/action_search"

android:icon="@mipmap/ic_action_search"

android:orderInCategory="100"

android:title="settings"

app:showAsAction="ifRoom"/>

第二部在代码中重写onCreateOptionsMenu方法加载菜单文件

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.menu_main, menu);

return true;

}

此时效果:

a426d24ad3dd973ff8db51498655e9cd.png

个性设置

左侧返回箭头

想要显示自带的返回箭头,需要去掉之前设定的属性:

app:navigationIcon="@mipmap/title_bar_back"

然后在代码中添加:

getSupportActionBar().setHomeButtonEnabled(true); //设置返回键可用

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

此时效果:

1b29a8a84e5cdae4c6db490983a4226d.png

溢出图标颜色

在style文件中添加:

@android:color/white

此时效果:

3c3c3532b06a8180df1074e5a680583b.png

自定义右侧溢出图标

在Style文件中添加:

@color/colorPrimary

@color/colorPrimaryDark

@color/colorAccent

@android:color/white

@style/OverflowButtonStyle

@mipmap/ic_action_add

此时运行效果:

09611b6de76fc9012c102b3f60e6074b.png

更改弹出菜单背景

在Style文件中添加样式:

在布局文件中添加使用主题:

app:popupTheme="@style/ToolbarPopupTheme"

此时运行效果:

2e91c875290b2fd975ed1d0acdd1bc5b.png

更改弹出菜单文字颜色

添加样式文件:

@color/colorPrimary

@color/colorPrimaryDark

@color/colorAccent

@android:color/white

@style/OverflowButtonStyle

@style/Overflow_Menu_Text_style

#fff

此时运行效果:

e9a52ae4b6ef86dfbf5569518775fdfd.png

修改标题文字大小

添加配置:

app:titleTextAppearance="@style/ToolbarTitleSize"

添加style:

28sp

此时运行效果:

64ae61036a672f107ba942151e4654da.png

子标题文字大小类似,添加配置然后定义style文件(此处省略):

app:subtitleTextAppearance="@style/ToolbarTitleSize"

修改弹出菜单位置

修改配置使弹出菜单显示在Toolbar下方:

首先重新设置属性:(在界面布局文件Toolbar中)

app:popupTheme="@style/OverflowMenuStyle"

在Style文件中添加:

false

wrap_content

5dp

#FFCC99

5dp

0dp

#0099CC

此时运行效果:

e432312fb3b39b05ab567cd6a315f6d2.png

事件处理

返回按钮事件

添加监听

toolbar.setNavigationOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(getApplicationContext(), "点击了返回箭头", Toast.LENGTH_LONG).show();

}

});

菜单项点击事件

重写方法

@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case R.id.action_settings:

break;

case R.id.action_search:

break;

case R.id.action_share:

break;

}

return true;

}

自定义Toolbar

Toolbar下面可以嵌套布局,直接将自己定义好的布局放到Toolbar下面即可

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize">

android:layout_width="match_parent"

android:layout_height="match_parent">

......

Toolbar 和 DrawerLayout 左滑菜单

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/drawer_left"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_gravity="start"

android:background="#CCCCFF"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:padding="10dp"

android:text="选项一"

android:textSize="18sp"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:padding="10dp"

android:text="选项二"

android:textSize="18sp"/>

添加左滑布局文件:

在主布局文件中引入:(在Toolbar下方)

在代码中添加关联:

DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_left);

ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.open, R.string.close);

mDrawerToggle.syncState();

mDrawerLayout.setDrawerListener(mDrawerToggle);

此时运行效果:

29b29fdccd3c9da81644d15c4bca6612.png

新版本studio,在新建Activity的时候可以选择对应的模板,会自动创建好DrawerLayout并关联Toolbar.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 9图片报错,Android2.1加载9Patch图片运行后报错

今天遇到一个很无语的问题,竟然是9Patch图片上多加了光晕效果。因为需要自定义Button,所以请用了9Patch图片,而且图片上面还有一点光晕效果,同样也被拉伸了,在2.2的系统上面正常能跑,2.1上面就出问题&#…

鸿蒙系统发布IT直播,华为开源平台上线:鸿蒙系统、方舟编译器在列

华为近日官方宣布,方舟编译器将于8月31日正式开源。这一颠覆式的技术堪称安卓系统性能革命,将带来巨大的性能提升,官方称操作流畅度提升可高达60%。8月31日凌晨,华为开源平台网站(HUAWEI OpenSource)就迫不及待地悄然上…

html网页之间怎么切换效果,HTML教程:网页页面切换的各种效果-♚付涛纪实阁♚...

其中,n表示的就是下面的数,n取不同的值,对应有不同的效果:0、box in 1、box out 2、circle in 3、circle out 4、wipe up 5、wipe down 6、wipe right 7、wipe left 8、vertical blinds 9、horizontal blinds 10、checkerboard across 11、ch…

火车头采集html文档没内容,火车头采集器:编辑任务中常见问题

1.标题前面大量空白,应该如何采集?答:程序里有html过滤选项,你可以选中过滤这些空白字符,如果有些空白字符不在html过虑里,你可以在过滤选项里添加那些字符。2.同一个页面,很多相同内容,怎么分做为多条记录…

金字塔图表 html,Highcharts 柱形图(柱状图及条形图)之 金字塔图 演示

JS 代码:var categories [0-4, 5-9, 10-14, 15-19,20-24, 25-29, 30-34, 35-39, 40-44,45-49, 50-54, 55-59, 60-64, 65-69,70-74, 75-79, 80-84, 85-89, 90-94,95-99, 100 ];var chart Highcharts.chart(container, {chart: {type: bar},title: {text: 2015 年德…

angular html页面嵌套,使用AngularJS来实现HTML页面嵌套的方法

html不支持嵌入在html页面中的html页面。实现这一功能通过使用以下方式:使用ajax - 让一台服务器来调用获取相应的html页面,并将其设置在html控件的innerhtml。使用服务器端包含 - jsp,php等web端服务器技术可以在包括动态页面中的html页面。…

jquery属于html框架吗,jquery是前端框架吗?

jquery是前端框架吗?jquery不是前端框架,它是一个JavaScript库。框架与库之间最本质区别在于控制权:you call libs, frameworks call you(控制反转)库:库是一个封装好的特定的集合,提供给开发者使用,而且是…

html ajax 菊花,Ajax加载菊花loding效果

Ajax 异步请求的时候,一般都会利用一个动态的 gif小图片来制作一个Ajax Loading ,以便增加用户体验。这里我们使用Spin.js ,该 js 脚本压缩后5k,可以不用任何图片,任何外部的CSS样式,就可以创建一个Ajax Lo…

ios html gif 显示,显示gif时出现巨大的内存使用Swift iOS

我正在制作一个应用程序,它在UIImageView中显示gif,并从parse中加载gif。我偶然发现的问题是每当我加载一个Gif时,它会使用大约20 MB的内存,并且当我执行一个segue时,这个内存不会被分配。我从UIImageView中删除图像本…

非一体式台式计算机,一体台式机推荐及介绍【详解】

随着科技的不断发展电脑已经走进了家家户户,几乎每一个家庭都有一台甚至是两台电脑,人们对于电脑的需求越来越高,对于电脑的要求也就越来越大。不仅仅是在性能方面外观设计也很重要。随着人们对于更轻更薄的追求,电脑渐渐的开始走…

窄带物联网应用于工业计算机,工业物联网嵌入式边缘计算机的制作方法

本实用新型涉及工业物联网领域,具体地说是一种工业物联网嵌入式边缘计算机。技术背景加速发展物联网已成国际社会的战略共识,多国纷纷都在加快研发物联网技术,物联网已经升级到了国家级战略目标。传统制造业企业由于工厂中设备型号不一致、新…

计算机网络模拟器 mac,网易mumu模拟器mac版使用常见问题解决办法_3DM手游

不少Mac设备的用户,在使用网易MuMu模拟器时,都会遇到些许问题。关于大家在使用网易MuMu模拟器Mac版时经常会出现的问题,下面小编也为大家带来了一个FAQ。网易MuMu常见问题解答:1、Mac版安装环境操作系统:mac os 10.11.…

如何让cloudflare缓存html,CloudFlareCDN页面规则缓存设置教程

wordpress博客使用CloudFlare的CDN来加速网站(页面规则缓存设置教程)此篇文章只讲wordpress站点使用CloudFlare CDN的页面规则教程。CloudFlare的CDN有一个很好的特点就是可以整站缓存下来,但是整站缓存时我们是无法登陆后台的,新写的文章也无法预览。所…

855计算机应用基础,2017年曲阜师范大学信息技术与传播学院855计算机应用基础考研导师圈点必考题汇编...

一、选择题1. 有以下程序:程序运行后的输出结果是( )。A.1256B.5634C.5612D.3456【答案】B【解析】第一次funl 传递参数5, 6,输出5, 6, 第二次调用fun2,fun2的作用是将全局变量a 变为3, b 变为4, 故输出3, 4。2. 有以下…

计算机课中排序选什么,《计算机应用基础课件》1.6 排序复习课程.ppt

《计算机应用基础课件》1.6 排序复习课程.ppt第 1 章  数据结构 ;插入排序的基本思想:;1.直接插入排序: 思路:认可第1个记录已排好序,然后将第2个到第n个记录依次插入到前面已排好序的记录组成的文件中。 具体过程(第i个记录Ri插入到前面i-1…

计算机图形设计论文 真实图形生成技术的发展,绘制技术论文,关于计算机图形图像绘制技术的现状应用相关参考文献资料-免费论文范文...

导读:这是一篇与绘制技术论文范文相关的免费优秀学术论文范文资料,为你的论文写作提供参考。(四川建筑职业技术学院,德阳618000)(Sichuan College of Architectural Technology,Deyang 618000,China)宗海图绘制技术规范:画 干画笔 绘制技术摘 要: 随着计算机图形图像…

检索有关计算机系统功能设计方面的文献,文献检索系统

文献检索系统是指按某种方式、方法建立起来的供读者查检信息的一种有层次的体系,是表征有序的信息特征的集合体。在这个集合体中,对所收录的信息的外部特征和内容特征都按需要有着详略不同的描述,每条描述记录(即款目)都标明有可供检索用的标…

hashset java 键值对_Java集合 - HashSet的定义以及用法

HashSet的定义HashSet类实现了Set接口,由一个实际上是HashMap实例的散列表​支持。不能保证该集合的迭代次序,这意味着该类不能保证元素随时间的不变顺序。这个类允许null元素。该类还为基本操作(如添加,删除,包含和大小)提供了恒…

计算机对口高考文化试卷,计算机对口高考模拟试卷

计算机对口高考模拟试卷 (9页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9 积分2011-2012第一学年对口计算机期中试卷一、选择题(每题2分,共50分) 下列各组设备中,全部属…

delve 调试带参数_带你学够浪:Go语言基础系列-环境配置和 Hello world

前面几周陆陆续续写了一些后端技术的文章,包括数据库、微服务、内存管理等等,我比较倾向于成体系的学习,所以数据库和微服务还有后续系列文章补充。最近工作上比较多的 Golang 编程,现在很多互联网公司都在转向 Golang 开发&#…