SnackBar是一个和Toast类似的空间,用于弹出提示作用,但是相比于Toast而已,SnackBar会有一个不错的动画效果,同时当手指完成屏幕中其他操作的时候,SnackBar会立即消失。同时可以为SnackBar设置一个按钮点击事件,效果如下图所示(图片引用:http://www.tuicool.com/articles/BfEbMvB)
而同时SnackBar使用方式也与Toast类似:
public class SnackBarDemo extends Activity{
private CoordinatorLayout layout;
private Button btn;
private LinearLayout layout_m;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.snackbar);
layout= (CoordinatorLayout) findViewById(R.id.layout);
layout_m= (LinearLayout) findViewById(R.id.layout_m);
btn= (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Snackbar.make(layout_m,"哈哈哈",Snackbar.LENGTH_SHORT).setAction("action", new View.OnClickListener() {
@Override
public void onClick(View v) { }
}).show();
}
});
}
}
以上代码就可以完成Snackbar的显示,同时setAction函数就是为了给Snackbar设置按钮和点击事件,这个是可选内容。
同时另一个方面就是如何修改Snackbar颜色的问题,下面是Snackbar类库中有关的布局文件:
<merge xmlns:android="http://schemas.android.com/apk/res/android"> <TextView
android:id="@+id/snackbar_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="@dimen/snackbar_padding_vertical"
android:paddingBottom="@dimen/snackbar_padding_vertical"
android:paddingLeft="@dimen/snackbar_padding_horizontal"
android:paddingRight="@dimen/snackbar_padding_horizontal"
android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
android:maxLines="@integer/snackbar_text_max_lines"
android:layout_gravity="center_vertical|left|start"
android:ellipsize="end"/> <TextView
android:id="@+id/snackbar_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/snackbar_extra_spacing_horizontal"
android:layout_marginStart="@dimen/snackbar_extra_spacing_horizontal"
android:layout_gravity="center_vertical|right|end"
android:background="?attr/selectableItemBackground"
android:paddingTop="@dimen/snackbar_padding_vertical"
android:paddingBottom="@dimen/snackbar_padding_vertical"
android:paddingLeft="@dimen/snackbar_padding_horizontal"
android:paddingRight="@dimen/snackbar_padding_horizontal"
android:visibility="gone"
android:textAppearance="@style/TextAppearance.Design.Snackbar.Action"/> </merge>
可以发现,其实Snackbar就是两个TextView,但是由于代码的封装性,我们没有办法直接修改其中的样式,这个时候我们可以使用getView()来取得相应的控件并修改其样式:
public static void setSnackbarMessageTextColor(Snackbar snackbar, int color) {
View view = snackbar.getView();
((TextView) view.findViewById(R.id.snackbar_text)).setTextColor(color);
}
在实例化Snackbar的时候调用改函数就可以了:
Snackbar snackbar =
Snackbar.make(container, "SnackbarTest", Snackbar.LENGTH_LONG).setAction("Action", new View.OnClickListener() {
@Override
public void onClick(View v) {
Snackbar snackbar =
Snackbar.make(container, "ActionClick", Snackbar.LENGTH_LONG);
setSnackbarMessageTextColor(snackbar,Color.parseColor("#FF0000"));
snackbar.show();
}
});
setSnackbarMessageTextColor(snackbar, Color.parseColor("#FFFFFF"));
snackbar.show();