ToolBar詳解

android:ToolBar詳解(手把手教程)

基礎使用

分成下列三個部分:
風格(style)
界面(layout)
程序(java)

風格(style)

風格要調整的地方有二

一在res/values/styles.xml中
二在res/values-v21/styles.xml中

因為此范例只使用Toolbar,所以我們要將原本的ActionBar隱藏起來,為方便,在/res/values/styles.xml增加一個名為AppTheme.Base的風格。然后將原本APPTheme的parent屬性改為AppTheme.Base.

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

<style name = "AppTheme.Base"  parent = "Theme.AppCompat">
<item name = "windowActionBar">false</item>
<del><item name="android:windowNoTitle">true</item></del>
<!-- 使用 API Level 22 編譯的話馍驯,要拿掉前綴字 -->
<item name = "windowNoTitle">true</item>
</style>

再來調整Android 5.0的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>
界面(Layout)

在activity_main.xml里面添加Toolbar控件:

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

</android.support.v7.widget.Toolbar>

這里需要注意,要將RelativeLayout里的四個方向的padding屬性去掉绅喉,并記得將原本的Hello World設為layout_below = "@+id/toolbar"

程序(java)

在MainActivity.java中加入Toolbar的聲明

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

聲明之后,再將之用setSupportActionBar()設定叫乌,Toolbar即能取代原本的actionbar了柴罐。

自定義顏色(Customization color)

description.JPG
  1. ColorPrimary(狀態(tài)欄顏色):在風格(styles)或是主題(themes)里進行設定。
  2. App bar底色
    這個設定分為二憨奸,若你的 android app 仍是使用 actionbar 革屠,則直接在風格 (styles) 或是主題 (themes) 里進行設定 colorPrimary 參數(shù)即可;可若是采用 toolbar 的話排宰,則要在界面 (layout) 里面設定 toolbar 控件的 background 屬性似芝。
  3. navigationBarColor(導航欄底色)
    僅能在 API v21 也就是 Android 5 以后的版本中使用, 因此要將之設定在 res/values-v21/styles.xml 里面

a)主視窗底色:windowBackground
我們需要設定的地方有三板甘,一是style中(/res/values/styles.xml)

<style name = "AppTheme.Base" parent = "Theme.AppCompat">
<item name = "windowActionBar">false</item>
<item name = "android:windowNoTitle">true</item>
<!--Actionbar color -->
<item name = "colorPrimary">@color/accent_material_dark</item>
<!--Status bar color -->
<item name = "colorPrimaryDark">@color/accent_material_light</item>
<!-- window color-->
<item name = "android:windowBackground">@color/dim_foreground_materi al_dark</item>
</style>

再來是v21的style中的(res/values-v21/styles.xml)

<style name="AppTheme" parent="AppTheme.Base">
  <!--Navigation bar color-->
  <item name="android:navigationBarColor">@color/accent_material_light</item>
</style>

最后党瓮,就是Toolbar的background進行設定

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

</android.support.v7.widget.Toolbar>

在本范例中,Toolbar是設定來在activity_main.xml盐类,對其設定background屬性:android:background="?attr/colorPrimary"寞奸,這樣就可以使之沿用ActionBar的顏色設定嘍。

控件(component)

在<android.support.v7.widget.Toolbar>標簽中在跳,還有幾個大家常用的元素可以使用枪萄,如下圖:

Toolbar_component.JPG
  1. setNavigation
    即設定up botton的圖標,因為Material的界面猫妙,在Toolbar這里的up botton樣式也有別于過去的ActionBar瓷翻。
  2. setLogo
    APP的圖標
  3. setTitle
    主標題
  4. setSubtitle
    副標題
  5. setOnMenuItemClickListener
    設定菜單各按鈕的動作

在MainActivity.java中的代碼:

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

// App Logo
toolbar.setLogo(R.drawable.ic_launcher);
// Title
toolbar.setTitle("My Title");
// Sub Title
toolbar.setSubtitle("Sub title");

setSupportActionBar(toolbar);

// Navigation Icon 要設定在 setSupoortActionBar 才有作用
// 否則會出現(xiàn) back button
toolbar.setNavigationIcon(R.drawable.ab_android);

這里需要留意的是setNavigationIcon需要放在setSupportActionBar之后才會生效。

菜單部分割坠,需要現(xiàn)在res/menu/menu_main.xml左定義:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  tools:context=".MainActivity">

  <item android:id="@+id/action_edit"
    android:title="@string/action_edit"
    android:orderInCategory="80"
    android:icon="@drawable/ab_edit"
    app:showAsAction="ifRoom" />

  <item android:id="@+id/action_share"
    android:title="@string/action_edit"
    android:orderInCategory="90"
    android:icon="@drawable/ab_share"
    app:showAsAction="ifRoom" />

  <item android:id="@+id/action_settings"
    android:title="@string/action_settings"
    android:orderInCategory="100"
    app:showAsAction="never"/>
</menu>

再回到MainActivity.java中加入OnMenuItemClickListener的監(jiān)聽者:

private Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
String msg = "";
swtich(menuItem.getItemId()) {
case R.id.action_edit:
msg +="Click edit";
break;
case R.id.action_share:
msg += "Click share";
break;
case R.id.action_settings:
msg +="CLick settting";
break;
}
if(!msg.equals("")) {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
return ture;
}
};

將onMenuItemClick監(jiān)聽者設置給toolbar

setSupportActionBar(toolbar);
...
//Menu item click 的監(jiān)聽事件一樣要設定在 setSupportActionBar 才有作用
toolbar.setOnMenuItemClickListener(onMenuItemClick);


補充資料

Android中RelativeLayout各個屬性的含義

android:layout_above="@id/xxx" --將控件置于給定ID控件之上
android:layout_below="@id/xxx" --將控件置于給定ID控件之下
android:layout_toLeftOf="@id/xxx" --將控件的右邊緣和給定ID控件的左邊緣對齊
android:layout_toRightOf="@id/xxx" --將控件的左邊緣和給定ID控件的右邊緣對齊
android:layout_alignLeft="@id/xxx" --將控件的左邊緣和給定ID控件的左邊緣對齊
android:layout_alignTop="@id/xxx" --將控件的上邊緣和給定ID控件的上邊緣對齊android:layout_alignRight="@id/xxx" --將控件的右邊緣和給定ID控件的右邊緣對齊android:layout_alignBottom="@id/xxx" --將控件的底邊緣和給定ID控件的底邊緣對齊android:layout_alignParentLeft="true" --將控件的左邊緣和父控件的左邊緣對齊
android:layout_alignParentTop="true" --將控件的上邊緣和父控件的上邊緣對齊
android:layout_alignParentRight="true" --將控件的右邊緣和父控件的右邊緣對齊android:layout_alignParentBottom="true" --將控件的底邊緣和父控件的底邊緣對齊android:layout_centerInParent="true" --將控件置于父控件的中心位置
android:layout_centerHorizontal="true" --將控件置于水平方向的中心位置
android:layout_centerVertical="true" --將控件置于垂直方向的中心位置

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末齐帚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子彼哼,更是在濱河造成了極大的恐慌对妄,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沪羔,死亡現(xiàn)場離奇詭異饥伊,居然都是意外死亡象浑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門琅豆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愉豺,“玉大人,你說我怎么就攤上這事茫因◎嚼梗” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵冻押,是天一觀的道長驰贷。 經常有香客問我,道長洛巢,這世上最難降的妖魔是什么括袒? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮稿茉,結果婚禮上锹锰,老公的妹妹穿的比我還像新娘。我一直安慰自己漓库,他們只是感情好恃慧,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渺蒿,像睡著了一般痢士。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茂装,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天怠蹂,我揣著相機與錄音,去河邊找鬼训唱。 笑死褥蚯,一個胖子當著我的面吹牛,可吹牛的內容都是我干的况增。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼训挡,長吁一口氣:“原來是場噩夢啊……” “哼澳骤!你這毒婦竟也來了?” 一聲冷哼從身側響起澜薄,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤为肮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肤京,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颊艳,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡茅特,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了棋枕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片白修。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖重斑,靈堂內的尸體忽然破棺而出兵睛,到底是詐尸還是另有隱情,我是刑警寧澤窥浪,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布祖很,位于F島的核電站,受9級特大地震影響漾脂,放射性物質發(fā)生泄漏假颇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一骨稿、第九天 我趴在偏房一處隱蔽的房頂上張望拆融。 院中可真熱鬧,春花似錦啊终、人聲如沸镜豹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趟脂。三九已至,卻和暖如春例衍,著一層夾襖步出監(jiān)牢的瞬間昔期,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工佛玄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留硼一,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓梦抢,卻偏偏與公主長得像般贼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奥吩,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容

  • 1.概述 本篇就為各位介紹 – toolbar哼蛆,這是用來取代過去 actionbar 的控件,而現(xiàn)在于 mater...
    一葉楓飄閱讀 1,020評論 0 1
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程霞赫,因...
    小菜c閱讀 6,409評論 0 17
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評論 25 707
  • 搜索Toolbar相關文章滿天飛腮介,但是大都不是很全面,每次要用到的時候又要重頭過濾一遍端衰。而且隨著版本升級很多較早的...
    木木仨兒閱讀 17,180評論 14 51
  • 冥想應該就是放空自己吧叠洗,呵呵甘改,我會耶,一放空自己就更收不回來心了灭抑。走神對我來說分分鐘的事十艾,也就經常為此苦惱,不收...
    李紅燁閱讀 170評論 0 0