歡迎來到Android design support library 系列之旅的第二部分,在第一部分中,我門討論了 Floating action button 以及它的屬性和一些FAB的問題。
今天我們來討論另外一個組件”Snackbar”
您好 Snackbar, 再見Toast
Snackbar,它是一個輕量級,快速的操作反饋,這是一個完美的機會去使用它。
Snackbar 是 design support library的另外一個組件,通過使用它,我們能夠在屏幕的底部(大多數時候)快速的彈出消息,它跟Toast很相似,但是又更加的靈活:
- 在一定的時間後會或者用戶與屏幕交互後,會自動的消失。
- 可以自定義操作,可選操作。
- 我們可以將Snackbar滑出屏幕來讓其消失
- 它是一個對上下文敏感的消息,所以這些消息是UI screen 的部分並且出現在屏幕其他所有元素之上,不像Toast消息一樣覆蓋在屏幕上。
- 同時只能夠顯示一個snackbar
Snackbar 繼承來Toast大部分的方法和屬性,例如設置時長的 LENGTH_LONG 和 LENGTH_SHORT 屬性。
如何使用
讓我們看看snackbar是如何使用的:
Snackbar.make(view, message, duration)
.setAction(action message, click listener)
.show();
成員方法:
- make() - 創建一個Snackbar來顯示消息
- setAction() - 設置一個動作
- show() - 顯示一個Snackbar
屬性:
- make() 方法的第一個參數是view, snackbar 將嘗試從給定參數的 view 去查找一個父view來持用 snackbar的視圖,它將會遍歷整個view的數,去找到到一個合適的parent,它可能是一個coordinatorLayout或者window decor的content view 哪一個先出來就哪個。
- 正如前面提到的,duration是一個類似於Toast duration的參數,你能夠使用LENGTH_LONG 或者 LENGTH_SHORT
例子:
Snackbar.make(rootlayout, "Hello SnackBar!", Snackbar.LENGTH_SHORT)
.setAction("Undo", new View.OnClickListener() {
@Override
public void onClick(View v) {
// Perform anything for the action selected
}
})
.show();
在這裏,rootlayout是一個framelayout 它裏面有一個FAB, 可以看看FAB例子的layout
點擊FAB 查看結果
是的,它成功了,但是用戶體驗卻不好,FAB應該往上移一點,這如下面文檔說明的:
當有一個CoordinatorLayout在你的佈局中時,應該允許Snackbar有一些特徵,例如滑動消失,或者能夠自動移動一些像FloatingActionButton這樣的控件。
我們將在系列的下一個部分討論有關於CoordinatorLayout。
Snackbar的可選配置
我們可以使用snackbar的一些額外的配置,setActionTextColor
和setDuration
Snackbar.make(rootlayout, "Hello SnackBar!", Snackbar.LENGTH_SHORT)
.setAction("Undo", new View.OnClickListener() {
@Override
public void onClick(View v) {
// Perform anything for the action selected
}
})
.setActionTextColor(R.color.material_blue)
.setDuration(4000).show();
你能從 https://github.com/PareshMayani/DesignSupportLibraryExamples 上下載到上面的例子
參考文章:
- https://developer.android.com/reference/android/support/design/widget/Snackbar.html
總結
在這個部分,我們討論了Snackbar,跟Toast消息很類似,但是又更加的靈活了,Snackbar中可以自定義動作,可以將Snackbar滑出屏幕來讓其消失並且在一定的時間後會或者用戶與屏幕交互後,會自動的消失
通過 CoordinatorLayout我們可以看到更多的effects 和 behaviours,在該系列文章中後續會討論它。