Android Toolbar

#######Android Toolbar 使用詳解
在Android APi版本21前設(shè)置導(dǎo)航欄都是使用ActionBar,但是為了推廣Material Design 風(fēng)格,谷歌在 Android版本21后推出ToolBar來替換它,在版本21后可以直接使用,21下可以導(dǎo)入android.support.v7.widget.Toolbar來兼容。相對(duì)于ActionBar ,ToolBar在功能上沒有太多變化,但是比它可以在布局里放在任何位置可以更靈活的和其它控件配合實(shí)現(xiàn)對(duì)應(yīng)的效果例如DrawerLayout等,這篇文章不做詳細(xì)說明,接下來看下ToolBar的實(shí)際使用。
Toolbar常用的功能根據(jù)API介紹有主要有如下幾種:
1. 設(shè)置導(dǎo)航欄圖標(biāo);
2. 設(shè)置App的logo;
3. 設(shè)置標(biāo)題
4. 支持ActionMenu
5. 可以添加自定義控件

由于ActionBar和其功能重合,所以一般使用ToolBar都會(huì)將ActionBar去掉。而去掉Actionbar有兩種方法:
1.在activity的style中設(shè)置

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

這個(gè)來去掉
2.在代碼中設(shè)置如
如果繼承的是Activity就調(diào)用
supportRequestWindowFeature(Window.FEATURE_NO_TITLE) ;
如果繼承是AppCompatActivity
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
接下來看下ToolBar常用的幾個(gè)方法

  //設(shè)置導(dǎo)航欄圖標(biāo)   
   mToolbar.setNavigationIcon(R.drawable.tile);
   //設(shè)置app logo
   mToolbar.setLogo(R.drawable.ic_launcher);
   //設(shè)置主標(biāo)題
   mToolbar.setTitle("Title");
   //設(shè)置子標(biāo)題
  mToolbar.setSubtitle("Subtitle");
//設(shè)置主標(biāo)題顏色
  mToolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
  //設(shè)置title style,包括文字顏色,文字大小
 mToolbar.setTitleTextAppearance(this, R.style.toolbar);
 //設(shè)置Subtitle color
mToolbar.setSubtitleTextColor(getResources().getColor(android.R.color.black));
//設(shè)置Subtitle style
mToolbar.setSubtitleTextAppearance(this, R.style.toolbar);
  //此方法是設(shè)置導(dǎo)航圖標(biāo)的點(diǎn)擊事件  
  mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
       });

效果如下:

20170106163228679.png
//設(shè)置右上角的填充菜單 此處menu直接顯示在ToolBaritem數(shù)量有限制,一般不超過3個(gè)多余的都以popview方式顯示
  mToolbar.inflateMenu(R.menu.main);
  //設(shè)置菜單的點(diǎn)擊事件
  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的基本用法,但是實(shí)際開發(fā)中肯定會(huì)遇到各種布局要求,所以toolbar也是支持添加多個(gè)自定義控件的。但是自定義的View位于 Logo和 menu 之間,如果ToolBar的所有屬性都調(diào)用了而有使用了menu此時(shí)自定義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

注:如果設(shè)置title,而添加的自定義控件過長,此時(shí)title會(huì)不顯示,logo和menu等還是正常顯示。
而我們?cè)趯?shí)際開發(fā)中,導(dǎo)航欄樣式會(huì)要很多變化,這個(gè)時(shí)候可以運(yùn)用到 theme來去改變。
ToolBar 有兩個(gè)樣式一個(gè)是popupTheme(這個(gè)是設(shè)置彈出菜單的樣式) ,一個(gè)是theme設(shè)置toolbar本身
樣式的
下面的一個(gè)圖就是對(duì)應(yīng)一些樣式的值,其中大部分的屬性更改在api 21后才有效

20170106174530317.jpg

popuptheme style如下
//彈出菜單的樣式

 <style name="AppBaseToolBaPoprTheme"> 
        <item name="android:textSize">10sp</item>//設(shè)置文字大小
        <item name="android:textColor">@color/font_blue</item>//設(shè)置字體色顏色
        <item name="android:background">@color/font_white</item>//設(shè)置背景顏色
   </style>

效果如下

20170106182835899.png

ToolBar theme 可以如下設(shè)置:

<item name="android:textColorPrimary">@color/font_red</item>//設(shè)置Toolbar的title顏色
<item name="actionMenuTextColor">@color/font_blue</item> //設(shè)置顯示在Toolbar上menu字體顏色
<item name="android:background">@color/font_red</item>//設(shè)置Toolbar背景顏色
 <item name="android:textSize">30sp</item>//設(shè)置顯示在Toolbar上menu字體大小

20170106183638597.png

另外如果是要更改默認(rèn)菜單那個(gè)三個(gè)點(diǎn)的圖標(biāo)可以通過一下方式

<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>//狀態(tài)欄的背景顏色 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>//三個(gè)點(diǎn)按鈕的樣式
    </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的基本用法,后面會(huì)寫和其它控件搭配的用法
另外說一個(gè)坑。
Toolbar 如果在APi23引入的如果在xml使用的是v7包的化在引入對(duì)應(yīng)的屬性的時(shí)候必須引入命名空間

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

并且所有屬性都要用這種,否則對(duì)應(yīng)的屬性無效,如果直接用的23以上APi可以不用這樣

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,034評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,337評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,883評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,114評(píng)論 0 286
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,625評(píng)論 1 332
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,555評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,737評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,973評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評(píng)論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,343評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,699評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容