Android Toolbar

#######Android Toolbar 使用详解
在Android APi版本21前设置导航栏都是使用ActionBar,但是为了推广Material Design 风格,谷歌在 Android版本21后推出ToolBar来替换它,在版本21后可以直接使用,21下可以导入android.support.v7.widget.Toolbar来兼容。相对于ActionBar ,ToolBar在功能上没有太多变化,但是比它可以在布局里放在任何位置可以更灵活的和其它控件配合实现对应的效果例如DrawerLayout等,这篇文章不做详细说明,接下来看下ToolBar的实际使用。
Toolbar常用的功能根据API介绍有主要有如下几种:
1. 设置导航栏图标;
2. 设置App的logo;
3. 设置标题
4. 支持ActionMenu
5. 可以添加自定义控件

由于ActionBar和其功能重合,所以一般使用ToolBar都会将ActionBar去掉。而去掉Actionbar有两种方法:
1.在activity的style中设置

      <style name="Theme.AppCompat.Light.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
       </style>

这个来去掉
2.在代码中设置如
如果继承的是Activity就调用
supportRequestWindowFeature(Window.FEATURE_NO_TITLE) ;
如果继承是AppCompatActivity
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
接下来看下ToolBar常用的几个方法

  //设置导航栏图标   
   mToolbar.setNavigationIcon(R.drawable.tile);
   //设置app logo
   mToolbar.setLogo(R.drawable.ic_launcher);
   //设置主标题
   mToolbar.setTitle("Title");
   //设置子标题
  mToolbar.setSubtitle("Subtitle");
//设置主标题颜色
  mToolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
  //设置title style,包括文字颜色,文字大小
 mToolbar.setTitleTextAppearance(this, R.style.toolbar);
 //设置Subtitle color
mToolbar.setSubtitleTextColor(getResources().getColor(android.R.color.black));
//设置Subtitle style
mToolbar.setSubtitleTextAppearance(this, R.style.toolbar);
  //此方法是设置导航图标的点击事件  
  mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
       });

效果如下:

20170106163228679.png
//设置右上角的填充菜单 此处menu直接显示在ToolBaritem数量有限制,一般不超过3个多余的都以popview方式显示
  mToolbar.inflateMenu(R.menu.main);
  //设置菜单的点击事件
  toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {

                return true;
            }
        });

 menu 文件
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
    >
    <item android:id="@+id/menu_scan"
          android:title="呵呵"
          android:icon="@drawable/ic_search"
          app:showAsAction="ifRoom"/>
    <item android:id="@+id/menu_stop"
          android:title="@string/menu_stop"
          app:showAsAction="ifRoom"/>
    <item android:id="@+id/menu_stop1"
          android:title="@string/menu_stop"
          app:showAsAction="ifRoom"/>
    <item android:id="@+id/menu_stop2"
          android:title="@string/menu_stop"
          app:showAsAction="ifRoom"/>
    <item android:id="@+id/menu_stop3"
          android:title="@string/menu_stop"
          app:showAsAction="never"/>
</menu>
20170106163102612.png

以上就是toolbar的基本用法,但是实际开发中肯定会遇到各种布局要求,所以toolbar也是支持添加多个自定义控件的。但是自定义的View位于 Logo和 menu 之间,如果ToolBar的所有属性都调用了而有使用了menu此时自定义view控件位置就比较少。而添加自定义控件方法如下:

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        app:title=""
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="" />
    </android.support.v7.widget.Toolbar>

就是和一般线性布局一样在里面添加控件就ok

注:如果设置title,而添加的自定义控件过长,此时title会不显示,logo和menu等还是正常显示。
而我们在实际开发中,导航栏样式会要很多变化,这个时候可以运用到 theme来去改变。
ToolBar 有两个样式一个是popupTheme(这个是设置弹出菜单的样式) ,一个是theme设置toolbar本身
样式的
下面的一个图就是对应一些样式的值,其中大部分的属性更改在api 21后才有效

20170106174530317.jpg

popuptheme style如下
//弹出菜单的样式

 <style name="AppBaseToolBaPoprTheme"> 
        <item name="android:textSize">10sp</item>//设置文字大小
        <item name="android:textColor">@color/font_blue</item>//设置字体色颜色
        <item name="android:background">@color/font_white</item>//设置背景颜色
   </style>

效果如下

20170106182835899.png

ToolBar theme 可以如下设置:

<item name="android:textColorPrimary">@color/font_red</item>//设置Toolbar的title颜色
<item name="actionMenuTextColor">@color/font_blue</item> //设置显示在Toolbar上menu字体颜色
<item name="android:background">@color/font_red</item>//设置Toolbar背景颜色
 <item name="android:textSize">30sp</item>//设置显示在Toolbar上menu字体大小

20170106183638597.png

另外如果是要更改默认菜单那个三个点的图标可以通过一下方式

<style name="AppBaseToolBarTheme" parent="Theme.AppCompat.Light">

        <!-- customize the color palette -->
        <item name="colorPrimary">@color/font_red</item>//ActionBar的背景颜色
        <item name="colorPrimaryDark">@color/font_red</item>//状态栏的背景颜色 21上才行
        <item name="colorAccent">@color/font_blue</item>
        <item name="android:textColorPrimary">@color/font_red</item> //title的颜色
        <item name="actionMenuTextColor">@color/font_blue</item>
        <item name="android:background">@color/font_white</item>//toolbar背景颜色
        <item name="actionOverflowButtonStyle">@style/MenuButton.Overflow</item>//三个点按钮的样式
    </style>

   <style name="MenuButton.Overflow" parent="android:style/Widget.Holo.Light.ActionButton.Overflow">
        <item name="android:src">@drawable/ic_search</item>
    </style>

然后在Toolbar Theme中引入AppBaseToolBarTheme该样式就可以
以上就是我了解Tolbar的基本用法,后面会写和其它控件搭配的用法
另外说一个坑。
Toolbar 如果在APi23引入的如果在xml使用的是v7包的化在引入对应的属性的时候必须引入命名空间

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

并且所有属性都要用这种,否则对应的属性无效,如果直接用的23以上APi可以不用这样

  app:title=""
  app:popupTheme="@style/AppBaseToolBaPoprTheme"
  app:theme="@style/AppBaseToolBarTheme"

在使用menu文件一样存在,都必须引入以上的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容