前言
Hello各位小伙伴們大家好啊,有一陣子沒寫簡書了,不知道大家有沒有想我啊,哈哈哈哈~咳咳,說點正事!其實一直想寫一個Material design系列的文章,由于前段時間比較忙,所以一直拖到現在,唉,慚愧啊!既然現在稍微有點時間了,那就開工吧!
Snackbar是什么
Snackbar 是一種針對操作的輕量級反饋機制,常以一個小的彈出框的形式,出現在手機屏幕下方或者桌面左下方。它們出現在屏幕所有層的最上方,包括浮動操作按鈕。
它們會在超時或者用戶在屏幕其他地方觸摸之后自動消失。Snackbar 可以在屏幕上滑動關閉。當它們出現時,不會阻礙用戶在屏幕上的輸入,并且也不支持輸入。屏幕上同時最多只能現實一個 Snackbar。
Android 也提供了一種主要用于提示系統消息的膠囊狀的提示框 Toast。Toast 同 Snackbar 非常相似,但是 Toast 并不包含操作也不能從屏幕上滑動關閉。
說了這么多,先來張gif圖看看。
看到了么,下面哪個黑黑的就是Snackbar了,首先我個人感覺這個要比Toast好看一些,那么為什么說他要比Toast好用呢?接下來慢慢給大家介紹~
Snackbar使用
在我們使用Material design庫之前,我們都要現在gradle文件中添加一行依賴compile 'com.android.support:design:25.3.1'
,以后的文章就不再繼續贅述了
基本使用其實很簡單,只需要一行代碼
Snackbar.make(mFloatingActionButton, "我是Sncakbar", Snackbar.LENGTH_LONG).show();
大家可以看到,使用起來跟Toast很類似。
添加Action
這里就到了與Toast不同的地方了,Toast只能看,不能做任何操作,但是我們的Snackbar不同,可以添加Action,舉個栗子
我們給Snackbar增加了一個action,并且點擊的時候談一個Toast出來,當然你可以做任何你想做的事情,代碼也很簡單。
Snackbar.make(mFloatingActionButton, "我是Sncakbar", Snackbar.LENGTH_LONG)
.setAction("點我啊", new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "你點擊了Action", Toast.LENGTH_SHORT).show();
}
})
//調用該方法可以修改Action字體顏色
.setActionTextColor(Color.RED)
.show();
突發奇想,我能給Action設置文字顏色,那么我能不能給Snackbar的文本設置顏色呢,然后我直接snackbar.
好吧,沒有我去看你的源碼,我就不信找不到方法,于是乎就翻啊翻啊翻。功夫不負有心人,還真給我翻到了,看了源碼,發現make方法在調用inflater,好,點到SnackbarContentLayout里面去看看
看源碼的過程中發現Snackbar的父類BaseTransientBottomBar中有一個getView方法,返回值就是本身
既然拿到了snackbar本身那就findViewById啊,找到之后一個強轉,然后調用TextView的方法setTextColor就可以改變顏色了,上一波效果圖
哈哈,成了,顏色變成了藍色。什么,你想改變Snackbar的背景顏色,好吧,我來試試。
這里gif錄制軟件出了點問題,但是可以明顯看到,背景顏色換了,代碼也只需要一行,用之前拿到的view,直接設置BackgroundColor
總結
今天的Snackbar使用教程就講到這里,你們在gif里面看到的聯動效果和右下角的懸浮按鈕是用到了Material design庫里面的CoordinatorLayout和FloatingActionButton,至于效果后續再慢慢說,對了,這里附上一段谷歌 Material Design設計規范中的話,方便大家知道什么情況下我們應該使用Snackbar。
短文本
通常 Snackbar 的高度應該僅僅用于容納所有的文本,而文本應該與執行>的操作相關。Snackbar 中不能包含圖標,操作只能以文本的形式存在。
最多0-1個操作,不包含取消按鈕
當一個動作發生的時候,應當符合提示框和可用性規則。當有2個或者2個以上的操作出現時,應該使用提示框而不是 Snackbar,即使其中的一個是取消操作。如果 Snackbar 中提示的操作重要到需要打斷屏幕上正在進行的操作,那么理當使用提示框而非 Snackbar。