前言

Marterial Design出来也有一段时间了,为了紧跟Google的设计规范,决定在项目中使用Toolbar。使用了一段时间之后,发现很多时候原始的Toolbar并不能满足项目的要求。为了适应项目多样化的需求,对Toolbar进行了深入的研究。

Toolbar简介

Toolbar使应用的标准工具栏,可以说是Actionbar的升级版。和Actionbar相比,Toolbar最明显的变化是自由,方便定制。

Toolbar简单使用

样式设置

style有两个地方需要调整,一个在 res/values/styles.xml, 另一个在 /res/values-v21/styles.xml(没有就不需要了),为了之后设定方便,我们先在 res/values/styles.xml 里增加一个名为 AppTheme.Base 的style。

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
</style>

因为只要Toolbar,所以需要把原本的 ActionBar 隐藏起来。你可以在style里面这样写:

<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>

但是我太懒了,发现原本就有隐藏标题的Theme,所以最终我是这样写的:

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
</style> <style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">
</style>

然后别忘记修改 /res/values-v21/styles.xml,将其 parent 属性改为 AppTheme.Base:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="AppTheme.Base">
</style>
</resources>

界面布局

在 activity_main.xml 里面加入 Toolbar 组件:

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize">
</android.support.v7.widget.Toolbar>

程序代码

请到 MainActivity.java 里加入 Toolbar 的声明:

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

运行截图:

修改Toolbar背景颜色

截图可以看到,标题栏和页面连在一起,现在需要让他们区分开来。
在style里面将主题改为白色,修改toolbar的颜色

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- toolbar(actionbar)颜色 -->
<item name="colorPrimary">#2196F3</item>
</style>

在布局文件里为toolbar加上背景

android:background="?attr/colorPrimary"

运行截图:

修改Toolbar文字颜色

上面的截图可以看到,文字为黑色,和背景不太搭配,现在将toolbar文字改成白色。这里分三步来改:

改变标题文字颜色

修改标题文字很简单,在style里加上下面的样式就行

<!--toolbar标题文字颜色-->
<item name="android:textColorPrimary">@android:color/white</item>

改变菜单文字颜色

这里给toolbar单独设置一个theme

app:theme="@style/ToolbarTheme"

在theme里面设置菜单文字为白色

<!-- toolbar菜单样式 -->
<style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
<item name="actionMenuTextColor">@android:color/white</item>
</style>

运行截图:

修改Toolbar popup menu样式

现在的popup menu是这样的

可以发现,根本就看不到文字。
现在我们使背景变成黑色。
在布局文件里给toolbar加上popupTheme:

app:popupTheme="@style/ToolbarPopupTheme"

在style里面这样写:

<!-- toolbar弹出菜单样式 -->
<style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat">
<item name="android:colorBackground">#212121</item>
</style>

改完之后的效果:

修改Toolbar 标题文字大小

现在又发现标题文字太大了,想改小一点。
给toolbar加上titleTextAppearance属性

app:titleTextAppearance="@style/ToolbarTitle"

对应的style

<!-- toolbar标题样式 -->
<style name="ToolbarTitle" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
<item name="android:textSize">14sp</item>
</style>

运行截图:

修改Toolbar 菜单文字大小

修改完标题之后,又发现菜单文字太大,需要改小。
现在在菜单样式里面修改,加上actionMenuTextAppearance属性,代码如下:

<!-- toolbar菜单样式 -->
<style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
<item name="actionMenuTextColor">@android:color/white</item>
<item name="actionMenuTextAppearance">@style/ToolbarMenuTextSize</item>
</style>

来看ToolbarMenuTextSize是怎么写的

<!-- toolbar菜单文字尺寸 -->
<style name="ToolbarMenuTextSize" parent="@style/TextAppearance.AppCompat.Menu">
<item name="android:textSize">10sp</item>
</style>

改完之后,看一下效果:

修改toolbar高度

可能有人会认为toolbar太高了,想把高度调低点。
条高度只需要调整toolbar的layout_height和minHeight属性就行了。
调整后的代码如下:

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="45dp"
android:background="?attr/colorPrimary"
android:minHeight="45dp"
app:popupTheme="@style/ToolbarPopupTheme"
app:titleTextAppearance="@style/ToolbarTitle"
app:theme="@style/ToolbarTheme">

修改toolbar menu的选中状态

很多时候,默认的选中状态并不能满足设计的需求。
想要更改选中状态,需要在toolbarTheme里加上下面的样式:

<item name="selectableItemBackground">@drawable/toolbar_button_bg</item>

toolbar_button_bg.xml文件的内容:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/primary_dark" android:state_pressed="true"/>
<item android:drawable="@color/primary_dark" android:state_focused="true"/>
<item android:drawable="@color/primary"/> </selector>

注:颜色根据需求变更。
更改后的选中截图:

总结

目前开发过程中,需要的toolbar样式定制都包含在这里了。后续有发现新的样式定制需求,会继续更新。
附上最终代码下载地址:
https://github.com/oyjt/android-toolbar

Android Toolbar样式定制详解的更多相关文章

  1. 给 Android 开发者的 RxJava 详解

    我从去年开始使用 RxJava ,到现在一年多了.今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 .而最近这几个 ...

  2. Android屏幕适配问题详解

    上篇-Android本地化资源目录详解 :http://www.cnblogs.com/steffen/p/3833048.html 单位: px(像素):屏幕上的点. in(英寸):长度单位. mm ...

  3. Xamarin android CardView的使用详解

    android 5.0新增加的一个控件CardView,在support v7兼容包中,意思就是卡片View,虽然可以设置阴影,圆角等等样式,但是我们也可以自己写出来,谷歌工程师之所以出这个,肯定是帮 ...

  4. ToolBar控件详解

    ToolBar控件详解 在Activity中添加ToolBar 1.添加库 dependencies { ... compile "com.android.support:appcompat ...

  5. android ------- 开发者的 RxJava 详解

    在正文开始之前的最后,放上 GitHub 链接和引入依赖的 gradle 代码: Github: https://github.com/ReactiveX/RxJava https://github. ...

  6. 转:给 Android 开发者的 RxJava 详解

    转自:  http://gank.io/post/560e15be2dca930e00da1083 评注:多图解析,但是我还是未看懂. 前言 我从去年开始使用 RxJava ,到现在一年多了.今年加入 ...

  7. 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING

    <Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th  2014 Email:skyseraph00@163.com 更多精彩请直接 ...

  8. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  9. ANDROID L——Material Design详解(UI控件)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

随机推荐

  1. canvas动画基础

    setInterval( function(){ render( context ); update(); } , ); window.requestAnimFrame = (function() { ...

  2. CString.Format

    Cstring str: str.Format("%d",num); d输出带符号十进制数 o输出无符号八进制数 x输出无符号十六进制数 u输出无符号数 c输出单个字符 s输出一串 ...

  3. 嵌入式Linux开发教程:Linux常见命令(上篇)

    摘要:这是对周立功编著的<嵌入式Linux开发教程>的第7期连载.本期刊载内容有关LinuxLinux常见命令中的导航命令.目录命令和文件命令.下一期将连载网络操作命令.安装卸载文件系统等 ...

  4. MyBatis环境搭建

    什么是MyBatis: MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架(O object R relatoin M mapping 框架),MyBatis 避免了几 乎所 ...

  5. 逐个后移,匹配符合要求的选项,ie7有bug

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  6. FZU 2146

    Easy Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  7. Creating Excel File in Oracle Forms

    Below is the example to create an excel file in Oracle Forms.Pass the Sql query string to the below ...

  8. word 与 endnote 反应慢的小技巧

    使用Word 2007/2010打开含有EndNote标注的文档时,Word反应速度会变慢,甚至出现“假死”状态,要等很长时间才能正常工作.问题出在Word的校正功能上,Word会对EndNote的标 ...

  9. 针对各种浏览器css不兼容的写法

    /*针对谷歌浏览器内核支持的CSS样式*/@media screen and (-webkit-min-device-pixel-ratio:0) { 样式 } /*针对IE6特制识别的CSS样式*/ ...

  10. 在服务器端如何提取checkbox提交的数据?

    HttpServeletRequest 单个字符串,getParameters() 多个字符串,getParametersValues(),返回一个数组,需要提前定义一个数组