AndroidToolbar學習

參考博客地址:原博客地址

1.概述:

Android3.0 Android推了ActionBar這個控件,而到了2013年Google開始大力推動所謂的AndroidStyle,想要逐漸改善過去紛亂的android界面設(shè)計,希望讓Android終端使用者盡可能在android手機里有一個一致的體驗,ActionBar過去最多人使用的兩大套件就是ActionBarSharelock,及官方在support library v7里的AppCompat.

既然介紹Toolbar,也意味著官方在某些程度上認為ActionBar限制了android app的開發(fā)與設(shè)計的彈性,而在material design也對之做了名稱的定義:App bar,那么如何在android app中用toolbar這個控件來做出一個基本的app bar

2.基礎(chǔ)套用

2.1風格

風格要調(diào)整的地方有二:

  • 一在res/values/styles.xml里面
  • 二在res/values-21/styles.xml里面

為了之后的方便,先在values/styles.xml里增加一個名為AppTheme.Base的風格

<style name="AppTheme.Base" parent="Theme.AppCompat">    
<item name="android:windowActionBar">false</item>    
<item name="android:windowNoTitle">true</item>
</style>

這里試用AndroidAPI22和以上要去掉"android:"否則會報錯

AppCompat does not support the current theme features: { windowActionBar: false, windowActionBarOverlay: false, android:windowIsFloating: false, windowActionModeOverlay: false, windowNoTitle: false }```

因為此范例只要用Toolbar,所以我們要讓原本的ActionBar隱藏起來,然后將原本的AppTheme的parent屬性改為上面的AppTheme.Base
### 2.2.界面
在activity_main里面添加

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:background="@android:color/white"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</android.support.v7.widget.Toolbar>


###2.3Java程序
在Activity里面加入ToolBar聲明:

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


##3.自定義顏色
- colorPrimaryDark(狀態(tài)欄底色):在風格(style)或者主題(Theme)里設(shè)定
- AppBar底色
 這個設(shè)定分為二,若你的android app仍然是使用ActionBar,則直接在風格(style)或者主題(themes)里面設(shè)定colorPrimary參數(shù)即可;
可視若采用Toolbar的話,則要在界面(layout)里面設(shè)置Toolbar的background屬性.
- navigationBarColor(導航欄底色):僅能在API21+也就是Android5.0之后的版本使用,因此要將之設(shè)定在res/values-21/styles.xml里面

- 主視窗底色:windowBackground
所以我們在這里設(shè)置的地方有三,一是style中(res/values/styles.xml)

<style name="AppTheme.Base" parent="Theme.AppCompat">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowBackground">@color/windowBackground</item></style>


二是v21(res/values-v21/styles.xml)中

<style name="AppTheme" parent="AppTheme.Base">

<item name="android:navigationBarColor">@color/colorAccent</item>
</style>```

三是本篇主角Toolbar的background設(shè)定

<android.support.v7.widget.Toolbar   
  android:background="@color/toolbar"    
  android:id="@+id/toolbar"    
  android:layout_height="wrap_content"    
  android:layout_width="match_parent">
</android.support.v7.widget.Toolbar>

toolbar是設(shè)定在activity_main.xml中,對其設(shè)定值background屬性可以設(shè)定為

android:background="?attr/colorPrimary" 

這樣就可以沿用ActionBar的顏色設(shè)定了

4控件(Compoment)

大概來說,預(yù)設(shè)常用的幾個元素:

  • setNavigationIcon:即設(shè)定up Button的圖標
  • setLogo:設(shè)定APP的圖標
  • setTitle:主標題
  • setSubtitle:副標題
  • setOnMenuItemClickListener:設(shè)定菜單各按鈕的動作

寫代碼
除了菜單以外的部分

Toolbar toolbar =(Toolbar)findViewById(R.id.toolbar);
//AppLogo
toolbar.setLogo(R.drawable.ic_launcher);
//Title
toolbar.setTitle(R.string.app_name);
//SubTitle
toolbar.setSubtitle("subtitle");
setSupportActionBar(toolbar);
//navigationIcon必須在setSupportActionBar之后才會有作用
//否則會出現(xiàn)backButton
toolbar.setNavigationIcon(R.drawable.ab_android);

菜單部分
需要先在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=".ToolbarActivity"    >    
<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_share"        
android:orderInCategory="90"        
android:icon="@drawable/ab_share"        
app:showAsAction="ifRoom"/>    
<item        
android:id="@+id/action_setting"        
android:title="@string/action_setting"        
android:orderInCategory="100"        
app:showAsAction="never"/>
</menu>

回到Activity寫OnMenuItemClickListener

public boolean onMenuItemClick(MenuItem item) {
    String message = ""
    switch (item.getItemId()){
        case R.id.action_edit:
            message += "";
            break;
        case R.id.action_share:
            message += "";
            break;
        case R.id.action_setting:
            message += "";
            break;
    }
    if (!message.equals(""))
    Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
    return true;
}

這個是讓Activity實現(xiàn)了OnMenuItemClickListener,復寫的方法,然后將這個監(jiān)聽器設(shè)置給Toolbar
toolbar.setOnMenuItemClickListener(this);
和 setNavigationIcon 一樣,需要將之設(shè)定在 setSupportActionBar 之后才有作用。

做個簡單的說明:

  • colorPrimaryDark
    狀態(tài)欄背景色贪壳。在 style 的屬性中設(shè)置筒愚。
  • textColorPrimary
    App bar 上的標題與更多菜單中的文字顏色。
    在 style 的屬性中設(shè)置恢总。
  • App bar 的背景色
    Actionbar 的背景色設(shè)定在 style 中的 colorPrimary迎罗。
    Toolbar 的背景色在layout文件中設(shè)置background屬性。
  • colorAccent
    各控制元件(如:check box片仿、switch 或是 radoi) 被勾選 (checked) 或是選定 (selected) 的顏色纹安。
    在 style 的屬性中設(shè)置。
  • colorControlNormal
    各控制元件的預(yù)設(shè)顏色砂豌。
    在 style 的屬性中設(shè)置
  • windowBackground
    App 的背景色厢岂。
    在 style 的屬性中設(shè)置
  • navigationBarColor
    導航欄的背景色,但只能用在 API Level 21 (Android 5) 以上的版本
    在 style 的屬性中設(shè)置
    **最后需要注意的是:使用material主題的時候阳距,必須設(shè)定targetSdkVersion =21咪笑,否則界面看起來是模糊的 **
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市娄涩,隨后出現(xiàn)的幾起案子窗怒,更是在濱河造成了極大的恐慌映跟,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扬虚,死亡現(xiàn)場離奇詭異努隙,居然都是意外死亡,警方通過查閱死者的電腦和手機辜昵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門荸镊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人堪置,你說我怎么就攤上這事躬存。” “怎么了舀锨?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵岭洲,是天一觀的道長。 經(jīng)常有香客問我坎匿,道長盾剩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任替蔬,我火速辦了婚禮告私,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘承桥。我一直安慰自己驻粟,他們只是感情好,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布凶异。 她就那樣靜靜地躺著格嗅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唠帝。 梳的紋絲不亂的頭發(fā)上屯掖,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音襟衰,去河邊找鬼贴铜。 笑死,一個胖子當著我的面吹牛瀑晒,可吹牛的內(nèi)容都是我干的绍坝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼苔悦,長吁一口氣:“原來是場噩夢啊……” “哼轩褐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玖详,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤把介,失蹤者是張志新(化名)和其女友劉穎勤讽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拗踢,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡脚牍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了巢墅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诸狭。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖君纫,靈堂內(nèi)的尸體忽然破棺而出驯遇,到底是詐尸還是另有隱情,我是刑警寧澤蓄髓,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布叉庐,位于F島的核電站,受9級特大地震影響双吆,放射性物質(zhì)發(fā)生泄漏眨唬。R本人自食惡果不足惜会前,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一好乐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓦宜,春花似錦蔚万、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至假夺,卻和暖如春淮蜈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背已卷。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工梧田, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人侧蘸。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓裁眯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親讳癌。 傳聞我的和親對象是個殘疾皇子穿稳,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

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