转载:微信公众号:安卓应用频道
Snackbar是Android Support Library 22.2.0里新增的一个控件,可以理解成一个加强版的Toast或者轻量级的Dialog。默认从底部弹出,会自动消失,也可以手动划出屏幕消失。Snackbar默认是不能交互的,但是可以添加一个点击事件。官方也是推荐用Snackbar来替代Toast的,一起来看看吧!!!
简单入门
Snackbar的写法非常简单,也和Toast非常类似
Snackbar.make(view, "SnackBar", Snackbar.LENGTH_SHORT).show();
Toast是系统级别的,是浮在所有View上的。而Snackbar却是只需要一个View来承载就可以了。
深入学习
添加点击事件,以及其他相关设置,相信代码一看就懂。
Snackbar.make(findViewById(R.id.btn_snack), "It is Snackbar",
Snackbar.LENGTH_SHORT)
.setActionTextColor(Color.WHITE)
.setCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
super.onDismissed(snackbar, event);
System.out.println("Snackbar 消失了");
}
@Override
public void onShown(Snackbar snackbar) {
super.onShown(snackbar);
System.out.println("Snackbar 出现了");
}
}).setAction("点我", new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("点击了Snackbar");
}
}).show();
设置背景色或背景图
Snackbar snackbar = Snackbar.make(findViewById(R.id.btn_snack),
"Snackbar", Snackbar.LENGTH_SHORT);
View view = snackbar.getView();
view.setBackgroundColor(Color.GREEN);
snackbar.show();
设置位置,动画,icon
Snackbar snackbar = Snackbar.make(v, "It is Snackbar", Snackbar.LENGTH_SHORT);
View snackbarView = snackbar.getView();
//设置显示位置居中
ViewGroup.LayoutParams vl =
snackbarView.getLayoutParams();
CoordinatorLayout.LayoutParams cl = new CoordinatorLayout.LayoutParams(vl.width, vl.height);
cl.gravity = Gravity.CENTER;
snackbarView.setLayoutParams(cl);
//设置字体的颜色
((TextView)snackbarView.findViewById(R.id.snackbar_text)).setTextColor(Color.RED);
//设置背景颜色
snackbarView.setBackgroundColor(Color.GREEN);
//自定义动画
// snackbarView.setAnimation();
//设置icon
ImageView imageView = new ImageView(this);
imageView.setBackgroundResource(R.mipmap.ic_launcher);
Snackbar.SnackbarLayout ss = (Snackbar.SnackbarLayout) snackbarView;
ss.addView(imageView, 0);
snackbar.setAction("点击", new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Toast", Toast.LENGTH_SHORT).show();
}
});
snackbar.show();
暂时只是学习了如何使用,并没有开始研究源码。而且实际使用中突然发现,位置设定不准确。后续会继续补充。