Android 的各種Bar,從ActionBar到CollapsingToolbarLayout。

Evan Chen
Evan Android Note
Published in
8 min readJan 14, 2020

Android前前後後推出了不少跟Bar有關的元件,這篇就來介紹一下這幾種Bar的差異:ActionBar、Toolbar、AppBarLayout、CollapsingToolbarLayout。

🔸ActionBar:最早出現、最基本的Bar。

🔸Toolbar:可客制Bar裡的內容。

🔸AppBarLayout:可響應其他View的變化而跟著變化。

🔸CollapsingToolbarLayout:可折疊式的Toolbar。

ActionBar

Action是最早出現、最基本的Bar。

在新增一個專案後,你可以在Style看到預設的AppTheme就是一個有ActionBar的Theme。

res/values/styles.xml

所以執行App開啟Activity後,就會有一個ActionBar在你的畫面上。

在ActionBar加入Item

你可以在ActionBar上加上Item,而這通常會放在右邊。

在res新增menu資料夾,再新增menu.xml

在Activity的onCreateOptionsMenu載入menu。

執行後就可以看到右邊多了2個Icon。

ActionBar上的Item點擊事件。在onOptionsItemSelected裡依照item.itemId來判斷是menu上的哪個Item被點擊。

Toolbar

Toolbar 是在android 5.0 之後,用來取代 ActionBar 的新元件,可以讓你客制Bar的內容。

例如我想在Bar裡放一個輸入欄位。

首先把現有的ActionBar的Style取消。新增一個Style,是沒有ActionBar的

res/values/styles.xml

新增一個Activity:ToolBarActivity,並在AndroidManifest.xml 設定ToolBarActivity的theme為AppTheme.NoActionBar

新增一個Toolbar,這裡面就可以放你想放的客制內容,這邊我們放一個輸入的欄位:TextInputLayout。

activity_tool_bar.xml

在Activity加上setSupportActionBar(toolbar)

如果要在ToolBar上,加上返回鍵,再加上以下處理。

執行後就可以看到Bar上面出現輸入欄位了。

AppBarLayout

AppBarLayout可以讓你搭配CoordinatorLayout,隨著其他View的變化而跟著變化。

像這個景點介紹的畫面,我們可以做到當我往上滑的時候,Toolbar跟著隱藏,往下滑的時候ToolBar就出現。

1.新增CoordinatorLayout,裡面加上AppBarLayout及NestedScrollView。

2.在AppBarLayout裡,新增Toolbar。

在NestedScrollView裡加上app:layout_behavior=”@string/appbar_scrolling_view_behavior”,表示AppBar會隨著ScrollView的變化而跟著變化。

Toolbar裡設定app:layout_scrollFlags則設定當NestedScrollView滑動時,對應的變化。當 app:layout_scrollFlags=scroll,往上滑動ScrollView時,Toolbar將跟著隱藏。

當 app:layout_scrollFlags=scroll|enterAlways,則再增加往下滑時,馬上就出現Toolbar。

CollapsingToolbarLayout

CollapsingToolbarLayout是一個可折疊式的Toolbar。

從上一個AppBarLayout的範例。在AppBarLayout裡加上CollapsingToolbarLayout,裡面再加上一個ImageView及Toolbar。原本在toolBar的app:layout_scrollFlags則改在CollapsingToolbarLayout裡設定。

CollapsingToolbarLayout的折疊模式

  • pin : 當CollapsingToolbarLayout完全收縮時,Toolbar仍在螢幕上。
  • parallax : 在滑動內容時,CollapsingToolbarLayout中的View也會同時滑動。
  • app:layout_collapseParallaxMultiplier=”0.7" :折疊變化過程的速度。

設定完之後,app:layout_scrollFlags 可以做更多的變化。

scroll|enterAlways
原本的這個設定則會變成一往下滑,Toolbar跟ImageView都會出現

scroll|enterAlwaysCollapsed
往下滑到最底才出現ImageView

scroll|enterAlways|enterAlwaysCollapsed
一往下滑就會出現Bar,至最底才會出現ImageView

exitUntilCollapsed
Scrollview 向上滑動時,CollapsingToolbarLayout 會隱藏到 minHeight 的高度,向下滑一點就會出現。

snap
CollapsingToolbarLayout 只會有完全隱藏或完全顯示,不會有出現一半的情況

CollapsingToolbarLayout 還有一些其他屬性可以設定

contentScrimCollapsingToolbarLayout 收縮後的背景顏色。

expandedTitleMarginStart還沒有收縮時title與左邊間距

expandedTitleMarginEnd還沒有收縮時title與右邊間距

以上就是這幾個Bar的介紹。

還有一個BottomAppBar則是在底部的Bar,就等到有空的時候再來介紹囉。

歡迎追蹤我的Facebook:Evan App Note

👊 給Android 初學者 的快速成長 線上課程

1️⃣ UI 進階實戰Material Design Component 讓你簡單做出效果超好的UI

2️⃣ 動畫入門到進階用動畫提升使用者體驗

3️⃣ 架構設計MVP、MVVM 讓你程式碼好維護

🆙 3堂組合包更划算 — Android 架構設計 + 動畫入門到進階 + UI 進階實戰

寫測試一點都不難,參考我的實體書:
Android TDD 測試驅動開發:從UnitTest、TDD到DevOps實踐

APP 程式總是改壞? — — — ☑ 用單元測試驗證正確性,再也不怕改錯!
APP 需求經常變更? — — — ☑ TDD:紅燈、綠燈、重構,三步驟法則!
APP 人工作業耗時? — — — ☑ 測試、部署自動化一次搞定!

--

--