Android-Snackbar介紹

Snackbar提供了一個介於Toast和AlertDialog之間輕量級控件,它可以很方便的提供消息的提示和動作反饋。

有時我們想這樣一種控件,我們想他可以想Toast一樣顯示完成便可以消失,又想在這個信息提示上進行用戶反饋。寫Toast沒有反饋效果,寫Dialog只能點擊去dismiss它,Snackbar完全可以達到這樣的需求。

在谷歌提出 material design 之後,終於推出了 Android.support.design 這個官方的material design庫,這幾天我也簡單瀏覽了下這個庫,基本上我們常用的組件都有了,今天的主角Snackbar就在這個庫中,因此要想使用SnackBar,首先我們就要引入這個庫。

引入這個庫的方法很簡單,首先找到你app的build gradle文件,引入如下代碼:

compile 'com.android.support:design:22.2.0'

如下:


然後點擊文件左上方的Sync Now按鈕如下:

這時再輸入Snackbar,如下:


也就是我們可以使用Snackbar了,可以通過一個簡單的實例來認識一下Snackbar,代碼如下:

public class MainActivity extends AppCompatActivity {
   private TextView tv;

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       
setContentView(R.layout.activity_main);
       
tv = (TextView) this.findViewById(R.id.tv);
       
tv.setOnClickListener(new View.OnClickListener() {
           @Override
           
public void onClick(View v) {
               Snackbar.make(tv, "this is message to show", Snackbar.LENGTH_LONG).
               setAction("click", new View.OnClickListener() {
                   @Override
                   
public void onClick(View v) {
                       tv.setText("click over");
                   
}
               }).show();

           
}
       });
   
}
}

創建一個Snackbar需要調用其make方法,傳入三個參數,第一個是view,第二個是要顯示的信息,第三個是Snackbar顯示的時間,其源碼如下:

public static Snackbar make(View view, CharSequence text, int duration) {
   Snackbar snackbar = new Snackbar(findSuitableParent(view));
   
snackbar.setText(text);
   
snackbar.setDuration(duration);
   return
snackbar;
}

爲Snackbar添加一個點擊事件的響應,可以調用setAction方法,傳入兩個參數,第一個是Action的提示內容,第二個是單擊事件的監聽,其源碼如下:

public Snackbar setAction(CharSequence text, final OnClickListener listener) {
   TextView tv = this.mView.getActionView();//創建一個TextView響應Action事件
   if
(!TextUtils.isEmpty(text) && listener != null) {
       tv.setVisibility(0);//0表示顯示
       
tv.setText(text);//設置顯示信息
       
tv.setOnClickListener(new OnClickListener() {
           public void onClick(View view) {
               listener.onClick(view);//爲這個TextView設置單擊事件監聽
               
Snackbar.this.dismiss();//這個TextView被點擊後Snackbar隱藏
           
}
       });
   
} else {
       tv.setVisibility(8);//表示不可見,並不佔空間;4表示不可見,但佔原來的空間
       
tv.setOnClickListener((OnClickListener)null);
   
}

   return this;
}

從源碼可以看出來,點擊Snackbar的Action按鈕之後,Snackbar調用了其dismiss方法,隱藏Snackbar。

最後不要忘記調用show方法顯示Snackbar,其源碼如下:

public void show() {
   SnackbarManager.getInstance().show(this.mDuration, this.mManagerCallback);
}

運行實例如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章