Snackbar
快餐店
与Toast的区别:
- 比toast更加好,Snackbar 可以响应点击事件
- Snackbar 同一时间有且只有一个在显示。
- Snackbar 上不要有图标
- Snackbar上 Action 只能有一个。
- 如果有悬浮按钮 floating action button的话,snackbar 在弹出的时候 不要覆盖这个Button.
- 此外我个人认为 Snackbar 在一定程度上可以替代dialog的某些应用场景。比如以前网络不通的情况下 我们登陆失败,会给一个dialog提示,现在就可以用snackbar 来做这个有action的提示 更加方便快捷。
Snackbar的简单使用:
一、导入support design 库
在app的build gradle文件加入compile 'com.android.support:design:22.2.0'
二、snackbar 需要有一个父控件所以 我们可以随便找一个View(textview,button)用来做他的父控件。
我们知道一个布局的最最最最外层有一个DecorView,而这个view就是我们通用的view.
在activity中我们这样获取DecorView:getwindow().getDecorView();就得到了这个最外层的view.
三、简单使用
与Toast的用法几乎一毛一样
Snackbar.make(view,"呵呵哒",Snackbar.LENGTH_INDEFINITE).show();
四、实现更多功能
- 设置点击事件
Snackbar.make(view,"呵呵哒",Snackbar.LENGTH_INDEFINITE)
.setAction("fuck you!", new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "once again fuck you", Toast.LENGTH_SHORT).show();
}
}).show();
- 设置点击事件字体颜色
Snackbar.make(view, "呵呵哒", Snackbar.LENGTH_INDEFINITE)
.setActionTextColor(Color.YELLOW) //设置点击事件字体颜色
.setAction("fuck you!", new View.OnClickListener() { //设置事件
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "once again fuck you", Toast.LENGTH_SHORT).show();
}
}).show();
- 设置回调方法
Snackbar.make(view,"呵呵哒",Snackbar.LENGTH_SHORT).setCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) { //销毁时
super.onDismissed(snackbar, event);
Toast.makeText(MainActivity.this,"dismissed",Toast.LENGTH_SHORT).show();
}
@Override
public void onShown(Snackbar snackbar) { //显示时
super.onShown(snackbar);
Toast.makeText(MainActivity.this,"shown",Toast.LENGTH_SHORT).show();
}
}).show();
- 设置背景颜色
TextView tv = (TextView) findViewById(R.id.textView);
Snackbar sb = Snackbar.make(tv,"改变背景",Snackbar.LENGTH_SHORT);
View view2 = sb.getView();
view2.setBackgroundColor(Color.RED); //设置背景颜色
sb.show();
- 设置显示位置
Snackbar mSnackbar = Snackbar.make(findViewById(R.id.tv), "it is Snackbar", Snackbar.LENGTH_SHORT);
View v = mSnackbar.getView();
ViewGroup.LayoutParams vl = v.getLayoutParams();
CoordinatorLayout.LayoutParams cl = new CoordinatorLayout.LayoutParams(vl.width,vl.height);
//设置字体为红色
((TextView) v.findViewById(R.id.snackbar_text)).setTextColor(Color.RED);
//设置显示位置居中
cl.gravity = Gravity.CENTER;
v.setLayoutParams(cl);
//设置背景色为绿色
v.setBackgroundColor(Color.GREEN);
//自定义动画
//v.setAnimation();
//设置icon
ImageView iconImage=new ImageView(MainActivity.this);
iconImage.setImageResource(R.mipmap.ic_launcher);
//icon插入布局
Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) v;
snackbarLayout.addView(iconImage,0);
//设置按钮为蓝色
mSnackbar.setActionTextColor(Color.BLUE).setAction("点我", new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}).show();
样图:
参考:http://blog.csdn.net/qiang_xi/article/details/52449398