Material Design学习-----SnackBar
SnackBar是一个和Toast类似的空间,用于弹出提示作用,但是相比于Toast而已,SnackBar会有一个不错的动画效果,同时当手指完成屏幕中其他操作的时候,SnackBar会立即消失。同时可以为SnackBar设置一个按钮点击事件,效果如下图所示(图片引用:http://www.tuicool.com/articles/BfEbMvB)
而同时SnackBar使用方式也与Toast类似:
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的时候调用改函数就可以了:
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();