自定义ToolBar之一

其实已经有很多大神写过这方面的文章了,不过我比较蠢吧,老有一些地方看不懂的,翻了很多关于Toolbar方面的文章和视频,这儿总结一下。
  参考资料:youtube:slidenerd

阶段一 自定义配色可以修改配色地方-API>=21

Toolbar可以自定义的地方包括:

  • 状态栏颜色(Status Bar/colorPrimaryDark)(只在api21及以上有效)
  • 标题栏背景颜色(ToolBar/colorPrimary)
  • 弹出菜单背景颜色(OptionMenu)
  • 内容区域背景颜色(Background)
  • 导航栏颜色(NavigationBar)(只在api21及以上有效)
  • 标题文字颜色 (TitleBarTextColor/TextColorPrimary)
  • 弹出菜单文字颜色(TextColor)
  • 内容文字颜色(TextColor)
  • 控件颜色(ColorAccent)

文/pheynix(简书作者)
原文链接:http://www.jianshu.com/p/91eabe0c326d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。API<21暂时无法修改status bar和navigation bar的配色

新建一个项目,在res/values/下新建colors.xml,并添加要用到的颜色,具体颜色自己选择,建议参考google给出的规范(自备FQ);

1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3     <color name="primaryColor">#ffeb3b</color>
4     <color name="primaryColorDark">#fbc02d</color>
5     <color name="accentColor">#50514f</color>
6     <color name="textColorPrimary">#33b5e5</color>
7     <color name="textColorSecondary">#aa66cc</color>
8 </resources>

在res/layout下新建toolBar.xml作为toolBar布局文件;

1  <?xml version="1.0" encoding="utf-8"?>
2  <android.support.v7.widget.Toolbar
3     xmlns:android="http://schemas.android.com/apk/res/android"
4     xmlns:app="http://schemas.android.com/apk/res-auto"
5     android:layout_width="match_parent"
6     android:layout_height="wrap_content"
7     android:background="@color/primaryColor"
8 </android.support.v7.widget.Toolbar>
  • 行1中必须要使用android.support.v7.widget.Toolbar
  • 行7设置了内容区域背景颜色

在MainActivity.java中加入以下代码引入toolBar,
---必须import android.support.v7.widget.Toolbar ---

文/pheynix(简书作者)
原文链接:http://www.jianshu.com/p/91eabe0c326d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

 1 package com.pheynix.material;
 2
 3 import android.os.Bundle;
 4 import android.support.v7.app.ActionBarActivity;
 5 import android.support.v7.widget.Toolbar;
 6 import android.view.Menu;
 7 import android.view.MenuItem;
 8
 9 public class MainActivity extends ActionBarActivity {
10
11 @Override
12 protected void onCreate(Bundle savedInstanceState) {
13     super.onCreate(savedInstanceState);
14     setContentView(R.layout.activity_main);
15
16    //----------------------以下为添加的代码----------------------
17     Toolbar toolbar = (Toolbar) findViewById(R.id.app_bar);
18     setSupportActionBar(toolbar);
19    //----------------------以上为添加的代码----------------------
20 }
21
22 @Override
23 public boolean onCreateOptionsMenu(Menu menu) {
24     getMenuInflater().inflate(R.menu.menu_main, menu);
25     return true;
26 }
27
28 @Override
29 public boolean onOptionsItemSelected(MenuItem item) {
30     int id = item.getItemId();
31
32     if (id == R.id.action_settings) {
33         return true;
34     }
35
36     return super.onOptionsItemSelected(item);
37 }

然后我们自定义API<21使用的styles,修改values/styles.xml如下,

 1 <resources>
 2    <style name="AppTheme" parent="MyAppTheme">
 3    </style>
 4
 5    <style name="MyAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
 6        <item name="colorPrimary">@color/primaryColor</item>
 7        <item name="colorPrimaryDark">@color/primaryColorDark</item>
 8        <item name="colorAccent">@color/accentColor</item>
 9    </style>
10 </resources>

---567行name="colorPrimary"而不是name="android:colorPrimary",谁错谁怀孕---

  • 行2的style标签是AndroidManifest使用的主题(android:theme),继承自我们自定义的style即可实现对app主题的修改
  • 行4的style是我们自定义的style,parent可以定义为:
    • parent="Theme.AppCompat.Light"-->白色基调的主题(是这么说的么)
    • parent="Theme.AppCompat"-->黑色基调的主题
    • parent="Theme.AppCompat.Light.NoActionBar"-->白色基调的主题,并且去掉默认的ActionBar
    • parent="Theme.AppCompat.NoActionBar"-->黑色基调的主题,并且去掉默认的ActionBar
  • 行5定义了标题栏的颜色,但是并无效果(嗯,并没有什么卵用),标题栏颜色需要在toolBar的布局文件toolBar.xml中定义android:background="@color/colorPrimary"
  • 行6用来定义状态栏(statusBar)的颜色
  • 行7用来定义控件的颜色

如果需要在API>=21的设备上运行,需要在res文件夹下新建values-21,并新建styles.xml,内容如下:

1 <resources>
2    <style name="AppTheme" parent="MyAppTheme">
3        <item name="android:colorPrimary">@color/primaryColor</item>
4        <item name="android:colorPrimaryDark">@color/primaryColorDark</item>
5        <item name="android:colorAccent">@color/accentColor</item>
6        <item name="android:navigationBarColor">@color/primaryColor</item>
7    </style>
8 </resources>
  • 行2选择继承我们自定义的MyAppTheme,当然继承values/styles.xml中的行4介绍的parent也是可以的(没有介绍到的也是行的~);
  • 行3中定义的标题栏背景色同样不起作用,需要在toolBar的布局文件toolBar.xml中定义android:background="@color/colorPrimary"
  • 行5定义导航栏的颜色,导航栏颜色只能在API>=21时生效

标题栏文字颜色和弹出菜单按钮的颜色也是可以自定义的;
如果只是希望设置颜色为黑或者白,只需要在toolBar.xml中改变样式,请看代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2    <android.support.v7.widget.Toolbar
 3        xmlns:android="http://schemas.android.com/apk/res/android"
 4        xmlns:app="http://schemas.android.com/apk/res-auto"
 5        android:layout_width="match_parent"
 6        android:layout_height="wrap_content"
 7        android:background="@color/primaryColor"
 8        app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
 9        app:theme="@style/MyCustomToolBarStyle">
10    </android.support.v7.widget.Toolbar>
  • 行8设置了弹出菜单样式,值可以选择系统提供的:

    • @style/ThemeOverlay.Appcompat.Dark-->黑底白字
    • @style/ThemeOverlay.Appcompat.Light-->白底黑字
  • 行9设置了标题栏样式,值可以选择系统提供的:
    • @style/ThemeOverlay.Appcompat.Dark-->黑底白字
    • @style/ThemeOverlay.Appcompat.Light-->白底黑字
      不过由于前面在toolBar.xml中设置了background的属性,标题栏的底色是不是因为这里的设置而变化;

如果想设置更丰富的字体颜色,可以在values/styles.xml中添加自定义样式,然后在toolBar.xml中修改app:popupTheme和app:theme的值

在styles.xml中添加一个<style>标签:

1 <style name="MyCustomToolBarStyle" parent="ThemeOverlay.AppCompat.Light">
2    <item name="android:textColorPrimary">@color/textColorPrimary</item>
3    <item name="android:textColorSecondary">@color/textColorSecondary</item>
4    <item name=""android:textColor">@color/textColorSecondary</item>
5 </style>
  • 行2用来定义标题栏文字颜色
  • 行3用来定义弹出菜单icon的颜色(竖着排列的那三个点)
  • 行4用来定义弹出菜单OptionMenu文字的颜色
    修改toolBar.xml

    app:popupTheme="@style/MyCustomToolBarStyle"
    app:theme="@style/MyCustomToolBarStyle"

阶段一 自定义配色就这么多啦,我去睡觉了~
什么?!你说内容文字的颜色怎么设置?呐...

 1 <TextView
 2     android:textColor="#ffac00"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:text="@string/hello_world" />

文/pheynix(简书作者)
原文链接:http://www.jianshu.com/p/91eabe0c326d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-08-25 13:58:46

自定义ToolBar之一的相关文章

如何解决自定义ToolBar起始位置的空格(左对齐)问题

最近在做项目的时候,与到自定义toolbar的问题,自定义toolbar布局之类的并不是很难,但是自定义布局完成之后,控件总是无法左对齐,这极大的影响了App的美观. 结果谷歌后在Stack Overflow上发现了解决方案! ToolBar的app:contentInsetStart属性默认是16dp!所以将其改为0dp就可以将其左对齐了! 效果如下 PS:没有有app:contentInsetTop和app:contentInsetBottoman属性! 参考资料:http://stacko

Android开发:Toolbar基本使用和自定义Toolbar

Toolbar简介 Toolbar 是 Android 5.0 推出的一个 Material Design 风格的导航控件 ,用来取代之前的 Actionbar .与 Actionbar 相比,Toolbar 明显要灵活的多.它不像 Actionbar 一样,一定要固定在Activity的顶部,而是可以放到界面的任意位置,看下官方文档介绍: 注意看着几部分: - 1.设置导航栏图标: - 2.设置App的logo: - 3.支持设置标题和子标题: - 4.支持添加一个或多个的自定义控件: - 5

自定义ToolBar

一.Toolbar的简介 Toolbar 是 android 5.0 引入的一个新控件,Toolbar出现之前,我们很多时候都是使用ActionBar以及ActionActivity实现顶部导航栏的,因此Toolbar可以理解为是ActionBar的升级版.Toolbar大大扩展了ActionBar,使用更灵活,不像ActionBar那么固定,Toolbar更像是一般的View元素,可以被放置在view树体系的任意位置,可以应用动画,可以跟着scrollView滚动,可以与布局中的其他view交

Android 自定义Toolbar/ActionBar视图左边有空白

最近自定义Toolbar之后,发现左侧不能完全填充,总是留一点空白,经过查看新发布的V7的支持包中的style发现了解决方法. 查看Wiget.AppCompat.Toolbar的parent,如下: <style name="Base.Widget.AppCompat.Toolbar" parent="android:Widget"> <item name="titleTextAppearance">@style/Tex

去除自定义Toolbar中左边距

问题 自定义Toolbar之后,发现左侧不能完全填充,总是留一点空白,如下图: 原因 查看Wiget.AppCompat.Toolbar的parent(Toolbar默认的style),如下: <style name="Base.Widget.AppCompat.Toolbar" parent="android:Widget"> <item name="titleTextAppearance">@style/TextApp

商城项目实战 | 2.2 Android 仿京东商城——自定义 Toolbar (二)

本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 上一篇文章<商城项目实战 | 2.1 Android 仿京东商城--自定义 Toolbar (一)>中已经对 Toolbar 的一些基本属性以及简单使用做了介绍了,这篇文章就开始介绍如何定义属于自己的 Style 的 Toolbar 了. 自定义 Theme 修改 application 的 style -- AppTheme,自己设置 Toolbar 的背景色以及

UEditor自定义toolbar工具条

使用ueditor的同学都知道,ueditor里有很多功能,很全面,但有时候我们的编辑器不需要太多的功能,比如前台评论或者留言,就不需要这么多功能了,那我们怎么去定制自己想要的工具呢?官方给出了两个方法,ueditor工具栏上的按钮列表可以自定义配置,只需要通过修改配置项就可以实现需求: 1. 方法一:修改ueditorconfig.js里面的toolbars2. 方法二:实例化编辑器的时候传入toolbars参数第一种貌似不适合,需要改ueditor.config.js文件,有点麻烦,第二种就

JqGrid自定义toolbar

1.设置toolbar参数为[true,"top"],其意思是toolbar显示在Grid顶部,且其id为t_+Grid的id.e.g.: Grid的id为myGrid,toolbar的id则为t_myGrid. <table id="myGrid"></table> 2.在myGrid初始化后,$("#myGrid").append(自定义内容) 1 $(function(){ 2 $("#myGrid&quo

crm 4 隐藏自定义 toolbar

//隐藏指定title按钮 function hideISVButton(buttonTitle) { var comps = document.getElementsByTagName('li'); for (var i = 0; i < comps.length; i++) { if (comps[i].title == buttonTitle) { comps[i].style.display = "none"; break; } } } 隐藏其它的系统中自带的,先使用F1