ANDROID – TOOLBAR STEP BY STEP
2016-06-15 18:10
507 查看
今年(2014) 的 Google I/O 發表令多數人為之一亮的 Material Design,而 Google 也從「Google
I/O 2014」 開始,大家也陸陸續續地看到其更新的 Android APP 皆套用了這個設計介面。當然,這個設計介面著實讓大家感到驚艷外,更讓 Android 開發者開始擔心未來 APP 的介面處理了。
不過,所幸有著之前 ActionBar 的經驗後,Android 也很快地在 support library 裡面提供了相對應的 API 給開發者使用,本篇就為各位介紹 – Toolbar,這是用來取代過去 ActionBar 的元件,而現在於 material design 中也對之有一個統一名稱:App
bar,在未來的 android app 中,就以 Toolbar 這個元件來實作之。
在 Android 3.0 開始 Android 推了 ActionBar 這個介面出來,而到了 2013 年 Google 開始大力地推動所謂的 android style,想要逐漸改善過去 android 紛亂的介面設計,希望讓終端使用者盡可能在 android 手機有個一致的操作體驗。ActionBar 過去最多人使用的兩大套件就是 ActionBarSherlock 以及官方提供在 support
library v7 裡的 AppCompat 中。
既然會有本篇可以跟各位介紹的 Toolbar,也意謂著官方在某些程度上認為 ActionBar 限制了 android app 的開發與設計的彈性,而在 material design 也對之做了名稱的定義:App
bar。接下來將為各位分成幾個階段進行說明,如何在 android app app 中用 toolbar 這個元件來做出一個基本的 app bar 嘍。
基礎套用
介面的顏色設定
Toolbar
中常用的元件設定
本篇所使用到的程式碼:toolbar demo check point 0 ~ 4,請到Github 取得。
這個階段從 toolbar_demo_checkpoint0 開始,分成下列三個部份:
風格 (style)
介面 (layout)
程式 (java)
風格要調整的地方有二,一在 res/values/styles.xml 另一在 /res/values-v21/styles.xml,為了之後設定方便,我們先在 res/values/styles.xml 裡增加一個名為 AppTheme.Base 的風格
因為此範例只單純使用 Toolbar,所以我們要將讓原本的 ActionBar 隱藏起來,做了上面的設定,接著將原本 AppTheme 的 parent 屬性 改為 AppTheme.Base,這邊完整的程式碼如下:
再來調整在 Android 5 的風格檔: /res/values-v21/styles.xml,也將其 parent 屬性改為 AppTheme.Base:
請記得用 support v7 裡的 toolbar,不然會只有 API Level 21 也就是 Android 5 以上的版本才能使用。
這邊需注意,要將 RelatvieLayout 裡的針對四個方向 padding 屬性拿掉,並記得將原本的 Hello World 設定layout_below="@+id/toolbar" ,否則會看到像下面這樣的錯誤畫面。
請到 MainActivity.java 裡加入 Toolbar 的宣告:
宣告後,再將之用 setSupportActionBar 設定,即能取代表原本的 actionbar 嘍,此階段完成畫面如下:
完整程式碼請見:toolbar_demo_checkpoint1
上圖是將本階段要完成的結果畫面做了標示,搭配下述希望讓大家可以一目瞭然。狀態列底色: colorPrimaryDark
在風格 (styles) 或是主題 (themes) 裡進行設定。
App bar 底色
這個設定分為二,若您的 android app 仍是使用 actionbar 實作,則直接在風格 (styles) 或是主題 (themes) 裡進行設定colorPrimary 參數即可;
可若是採用 toolbar 的話,則要在介面 (layout) 裡面設定 toolbar 元件的 background 屬性。
導航列底色:navigationBarColor
僅能設定在 API v21 也就是 Android 5 以後的版本,因此要將之設定在 res/values-v21/styles.xml 裡面。
主視窗底色:windowBackground
也因此在這個階段,我們需要設定的地方有三,一是主要風格檔 (res/values/styles.xml)
再來是 v21 的風格檔 (res/values-v21/styles.xml)
最後,就是為了本篇的主角 – Toolbar 的 background 進行設定。
在本範例中,toolbar 是設定來在 activity_main.xml,對其設定 background 屬性: android:background="?attr/colorPrimary" ,這樣就可以使之延用
Actionbar 的顏色設定嘍。
最後,再來看一下結果畫面。
完整程式碼請見: toolbar_demo_checkpoint2
本階段將從 toolbar_demo_checkpoint2 接續,在還未於<android.support.v7.widget.Toolbar/> 標籤中,自行添加元件的
toolbar 有幾個大家常用的元素可以使用,請先見下圖:
大抵來說,預設常用的幾個元素就如圖中所標示,接著就依序來說明之:
setNavigationIcon
即設定 up button 的圖示,因應 Material 的介面,在 Toolbar 這裡的 up button 樣示也就有別於過去的 ActionBar 嘍。
setLogo
APP 的圖示。
setTitle
主標題。
setSubtitle
副標題。
setOnMenuItemClickListener
設定選單各按鈕的動作。
先來看到選單外的程式碼,於 MainActivity.java 撰寫如下的程式碼:
這邊要留意的是 setNavigationIcon 需要撰寫於setSupportActionBar 之後才會生效。選單的部份,需要先於 res/menu/menu_main.xml 做選單項目的設定:
再來回到 MainActivity.java 加入 OnMenuItemClickListener 的監聽式
接監聴式 onMenuItemClick 設定給 toolbar
和 setNavigationIcon 一樣,需要將之設定在 setSupportActionBar 之後才有作用。以上完成程式碼並執行之,可以看到如下的操作畫面嘍。
完整程式碼請見:toolbar_demo_checkpoint3
在這樣的架構設計下,Toolbar 直接成了 Layout 中大家可以控制的元件,相對於過去的 Actionbar 來說,設計跟操控性大幅度地提升。
本篇以上說明中所使用到的完整程式碼:toolbar demo check point 0 ~ 4,請到 Github 取得。
最後再附上一個介面上常會被設定的風格屬性,請見下圖:
這邊就從上到下做個簡單的整理:
colorPrimaryDark
狀態列背景色。
設定在 style 的屬性中。
textColorPrimary
App bar 上的標題與更多選單中的文字顏色。
設定在 style 的屬性中
App bar 的背景色
Actionbar 的背景色設定在 style 中的 colorPrimary。
Toolbar 的背景色設定其 layout 檔中的 background 的屬性中。
colorAccent
各控制元件(如:check box、switch 或是 radoi) 被勾選 (checked) 或是選定 (selected) 的顏色。
設定在 style 的屬性中
colorControlNormal
各控制元件的預設顏色。
設定在 style 的屬性中
windowBackground
App 的背景色。
設定在 style 的屬性中
navigationBarColor
導航列的背景色,但只能用在 API Level 21 (Android 5) 以上的版本
設定在 style 的屬性中
在官網的 Issue 中,有人提到這樣的問題,當今天設定
android:minHeight="?attr/actionBarSize" 時,在轉為橫向呈現時,Toolbar
的高度會更得很詭異。所以,將高度的設定 ?attr/actionBarSize 回歸到
height 去,
這樣的設定即可。而本篇的內容以及範例程式皆已如此更正,還請各位留意一下之後的寫法。
原文地址:http://blog.mosil.biz/2014/10/android-toolbar/
I/O 2014」 開始,大家也陸陸續續地看到其更新的 Android APP 皆套用了這個設計介面。當然,這個設計介面著實讓大家感到驚艷外,更讓 Android 開發者開始擔心未來 APP 的介面處理了。
不過,所幸有著之前 ActionBar 的經驗後,Android 也很快地在 support library 裡面提供了相對應的 API 給開發者使用,本篇就為各位介紹 – Toolbar,這是用來取代過去 ActionBar 的元件,而現在於 material design 中也對之有一個統一名稱:App
bar,在未來的 android app 中,就以 Toolbar 這個元件來實作之。
1. 概述
在 Android 3.0 開始 Android 推了 ActionBar 這個介面出來,而到了 2013 年 Google 開始大力地推動所謂的 android style,想要逐漸改善過去 android 紛亂的介面設計,希望讓終端使用者盡可能在 android 手機有個一致的操作體驗。ActionBar 過去最多人使用的兩大套件就是 ActionBarSherlock 以及官方提供在 supportlibrary v7 裡的 AppCompat 中。
既然會有本篇可以跟各位介紹的 Toolbar,也意謂著官方在某些程度上認為 ActionBar 限制了 android app 的開發與設計的彈性,而在 material design 也對之做了名稱的定義:App
bar。接下來將為各位分成幾個階段進行說明,如何在 android app app 中用 toolbar 這個元件來做出一個基本的 app bar 嘍。
基礎套用
介面的顏色設定
Toolbar
中常用的元件設定
本篇所使用到的程式碼:toolbar demo check point 0 ~ 4,請到Github 取得。
2. 基礎套用
這個階段從 toolbar_demo_checkpoint0 開始,分成下列三個部份:風格 (style)
介面 (layout)
程式 (java)
2.1 風格(style)
風格要調整的地方有二,一在 res/values/styles.xml 另一在 /res/values-v21/styles.xml,為了之後設定方便,我們先在 res/values/styles.xml 裡增加一個名為 AppTheme.Base 的風格123456 | <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> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <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> </resources> |
12345 | <?xml version="1.0" encoding="utf-8"?><resources> <style name="AppTheme" parent="AppTheme.Base"> </style></resources> |
2.2 介面(Layout)
在 activity_main.xml 裡面加入 Toolbar 元件:1 2 3 4 5 6 | <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_height="?attr/actionBarSize" android:layout_width="match_parent" > </android.support.v7.widget.Toolbar> |
這邊需注意,要將 RelatvieLayout 裡的針對四個方向 padding 屬性拿掉,並記得將原本的 Hello World 設定layout_below="@+id/toolbar" ,否則會看到像下面這樣的錯誤畫面。
2.3 程式 (Java)
請到 MainActivity.java 裡加入 Toolbar 的宣告:12 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar); |
完整程式碼請見:toolbar_demo_checkpoint1
3. 調色 (Customization color)
這個階段將從 toolbar_demo_checkpoint1 接著往下進行:上圖是將本階段要完成的結果畫面做了標示,搭配下述希望讓大家可以一目瞭然。狀態列底色: colorPrimaryDark
在風格 (styles) 或是主題 (themes) 裡進行設定。
App bar 底色
這個設定分為二,若您的 android app 仍是使用 actionbar 實作,則直接在風格 (styles) 或是主題 (themes) 裡進行設定colorPrimary 參數即可;
可若是採用 toolbar 的話,則要在介面 (layout) 裡面設定 toolbar 元件的 background 屬性。
導航列底色:navigationBarColor
僅能設定在 API v21 也就是 Android 5 以後的版本,因此要將之設定在 res/values-v21/styles.xml 裡面。
主視窗底色:windowBackground
也因此在這個階段,我們需要設定的地方有三,一是主要風格檔 (res/values/styles.xml)
1 2 3 4 5 6 7 8 9 10 11 | <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_material_dark</item> </style> |
1234 | <style name="AppTheme" parent="AppTheme.Base"> <!--Navigation bar color--> <item name="android:navigationBarColor">@color/accent_material_light</item></style> |
1 2 3 4 5 6 7 | <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> |
Actionbar 的顏色設定嘍。
最後,再來看一下結果畫面。
完整程式碼請見: toolbar_demo_checkpoint2
4. 元件 (component)
本階段將從 toolbar_demo_checkpoint2 接續,在還未於<android.support.v7.widget.Toolbar/> 標籤中,自行添加元件的toolbar 有幾個大家常用的元素可以使用,請先見下圖:
大抵來說,預設常用的幾個元素就如圖中所標示,接著就依序來說明之:
setNavigationIcon
即設定 up button 的圖示,因應 Material 的介面,在 Toolbar 這裡的 up button 樣示也就有別於過去的 ActionBar 嘍。
setLogo
APP 的圖示。
setTitle
主標題。
setSubtitle
副標題。
setOnMenuItemClickListener
設定選單各按鈕的動作。
先來看到選單外的程式碼,於 MainActivity.java 撰寫如下的程式碼:
1234567891011121314 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); // App Logotoolbar.setLogo(R.drawable.ic_launcher);// Titletoolbar.setTitle("My Title");// Sub Titletoolbar.setSubtitle("Sub title"); setSupportActionBar(toolbar); // Navigation Icon 要設定在 setSupoortActionBar 才有作用// 否則會出現 back buttontoolbar.setNavigationIcon(R.drawable.ab_android); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <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> |
12345678910111213141516171819202122 | private Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem menuItem) { String msg = ""; switch (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 setting"; break; } if(!msg.equals("")) { Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } return true; }}; |
1 2 3 4 5 6 | setSupportActionBar(toolbar); ... // Menu item click 的監聽事件一樣要設定在 setSupportActionBar 才有作用 toolbar.setOnMenuItemClickListener(onMenuItemClick); |
完整程式碼請見:toolbar_demo_checkpoint3
5. 總結
在這樣的架構設計下,Toolbar 直接成了 Layout 中大家可以控制的元件,相對於過去的 Actionbar 來說,設計跟操控性大幅度地提升。本篇以上說明中所使用到的完整程式碼:toolbar demo check point 0 ~ 4,請到 Github 取得。
最後再附上一個介面上常會被設定的風格屬性,請見下圖:
這邊就從上到下做個簡單的整理:
colorPrimaryDark
狀態列背景色。
設定在 style 的屬性中。
textColorPrimary
App bar 上的標題與更多選單中的文字顏色。
設定在 style 的屬性中
App bar 的背景色
Actionbar 的背景色設定在 style 中的 colorPrimary。
Toolbar 的背景色設定其 layout 檔中的 background 的屬性中。
colorAccent
各控制元件(如:check box、switch 或是 radoi) 被勾選 (checked) 或是選定 (selected) 的顏色。
設定在 style 的屬性中
colorControlNormal
各控制元件的預設顏色。
設定在 style 的屬性中
windowBackground
App 的背景色。
設定在 style 的屬性中
navigationBarColor
導航列的背景色,但只能用在 API Level 21 (Android 5) 以上的版本
設定在 style 的屬性中
6. 補充
在官網的 Issue 中,有人提到這樣的問題,當今天設定android:minHeight="?attr/actionBarSize" 時,在轉為橫向呈現時,Toolbar
的高度會更得很詭異。所以,將高度的設定 ?attr/actionBarSize 回歸到
height 去,
1 | android:layout_height="?attr/actionBarSize" |
原文地址:http://blog.mosil.biz/2014/10/android-toolbar/
相关文章推荐
- android 减小apk安装包大小方法及相关优化
- Android必知必会-Android Studio修改包名
- Android必知必会-Android Studio修改包名
- Android必知必会-Android Studio修改包名
- Android5.0的三大变化
- Android快速开发系列 10个常用工具类
- 在Android应用中实现查看“附近的人”的功能
- 启动Activity后在某个activity中一次性退出包括自身的所有activity
- android studio下生成SHA1
- Android知识点之屏幕适配
- Android6.0权限系统
- Android项目创建欢迎页
- android clean Architecture
- 4000 AndroidStudio Toolbar 滑动隐藏以及返回按钮点击事件
- 5、Android Service测试
- 5、Android Service测试
- 在Android Studio中有六种依赖
- Android-Universal-Image-Loader 源码解读
- Android 照相 滤镜
- Android下新增api编译问题