SnackBar是一個和Toast相似的空間,用於彈出提示做用,可是相比於Toast而已,SnackBar會有一個不錯的動畫效果,同時當手指完成屏幕中其餘操做的時候,SnackBar會當即消失。同時能夠爲SnackBar設置一個按鈕點擊事件,效果以下圖所示(圖片引用:http://www.tuicool.com/articles/BfEbMvB)android
而同時SnackBar使用方式也與Toast相似:ide
1 public class SnackBarDemo extends Activity{ 2 private CoordinatorLayout layout; 3 private Button btn; 4 private LinearLayout layout_m; 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.snackbar); 9 layout= (CoordinatorLayout) findViewById(R.id.layout); 10 layout_m= (LinearLayout) findViewById(R.id.layout_m); 11 btn= (Button) findViewById(R.id.btn); 12 btn.setOnClickListener(new View.OnClickListener() { 13 @Override 14 public void onClick(View v) { 15 Snackbar.make(layout_m,"哈哈哈",Snackbar.LENGTH_SHORT).setAction("action", new View.OnClickListener() { 16 @Override 17 public void onClick(View v) { 18 19 } 20 }).show(); 21 } 22 }); 23 } 24 }
以上代碼就能夠完成Snackbar的顯示,同時setAction函數就是爲了給Snackbar設置按鈕和點擊事件,這個是可選內容。函數
同時另外一個方面就是如何修改Snackbar顏色的問題,下面是Snackbar類庫中有關的佈局文件:佈局
1 <merge xmlns:android="http://schemas.android.com/apk/res/android"> 2 3 <TextView 4 android:id="@+id/snackbar_text" 5 android:layout_width="wrap_content" 6 android:layout_height="wrap_content" 7 android:layout_weight="1" 8 android:paddingTop="@dimen/snackbar_padding_vertical" 9 android:paddingBottom="@dimen/snackbar_padding_vertical" 10 android:paddingLeft="@dimen/snackbar_padding_horizontal" 11 android:paddingRight="@dimen/snackbar_padding_horizontal" 12 android:textAppearance="@style/TextAppearance.Design.Snackbar.Message" 13 android:maxLines="@integer/snackbar_text_max_lines" 14 android:layout_gravity="center_vertical|left|start" 15 android:ellipsize="end"/> 16 17 <TextView 18 android:id="@+id/snackbar_action" 19 android:layout_width="wrap_content" 20 android:layout_height="wrap_content" 21 android:layout_marginLeft="@dimen/snackbar_extra_spacing_horizontal" 22 android:layout_marginStart="@dimen/snackbar_extra_spacing_horizontal" 23 android:layout_gravity="center_vertical|right|end" 24 android:background="?attr/selectableItemBackground" 25 android:paddingTop="@dimen/snackbar_padding_vertical" 26 android:paddingBottom="@dimen/snackbar_padding_vertical" 27 android:paddingLeft="@dimen/snackbar_padding_horizontal" 28 android:paddingRight="@dimen/snackbar_padding_horizontal" 29 android:visibility="gone" 30 android:textAppearance="@style/TextAppearance.Design.Snackbar.Action"/> 31 32 </merge>
能夠發現,其實Snackbar就是兩個TextView,可是因爲代碼的封裝性,咱們沒有辦法直接修改其中的樣式,這個時候咱們能夠使用getView()來取得相應的控件並修改其樣式:動畫
1 public static void setSnackbarMessageTextColor(Snackbar snackbar, int color) { 2 View view = snackbar.getView(); 3 ((TextView) view.findViewById(R.id.snackbar_text)).setTextColor(color); 4 }
在實例化Snackbar的時候調用改函數就能夠了:ui
1 Snackbar snackbar = 2 Snackbar.make(container, "SnackbarTest", Snackbar.LENGTH_LONG).setAction("Action", new View.OnClickListener() { 3 @Override 4 public void onClick(View v) { 5 Snackbar snackbar = 6 Snackbar.make(container, "ActionClick", Snackbar.LENGTH_LONG); 7 setSnackbarMessageTextColor(snackbar,Color.parseColor("#FF0000")); 8 snackbar.show(); 9 } 10 }); 11 setSnackbarMessageTextColor(snackbar, Color.parseColor("#FFFFFF")); 12 snackbar.show();