对于Toast大家应该都不陌生,虽然Toast可以自定义布局,但我还是觉得太老套了,在很多app上达不到想要的效果。
因此,我们需要一款效果更好的工具来替代Toast。
Snackbar是design support library中另一个组件,它和Toast非常相似,但效果比Toast好很多。
使用Snackbar:
首先在gradle文件中添加:compile 'com.android.support:design:23.4.0'
Snackbar最原始的用法比较简单,和Toast类似:
Snackbar.make(mParent,"this is snackbar",Snackbar.LENGTH_SHORT)
.setAction("button", new View.OnClickListener() {
@Override
public void onClick(View v) {
//do something
}
}).show();
但是一般项目中使用的地方比较多,所以附上我自己对此写了一个工具类,有需要的朋友,可以直接使用。
public class SnackbarUtil {
//snackbar type
public static final int I = 1;
public static final int D = 2;
public static final int W = 3;
public static final int E = 4;
//color
private static int BLUE = 0xff2195f3;
private static int GREEN = 0xff4caf50;
private static int ORANGE = 0xffffc107;
private static int RED = 0xfff44336;
/**
* short duration
*
* @param view
* @param text
* @return
*/
public static Snackbar shortSnackbar(View view, CharSequence text) {
return shortSnackbar(view, text, 0);
}
/**
* short duration
*
* @param view
* @param text
* @param type
* @return
*/
public static Snackbar shortSnackbar(View view, CharSequence text, int type) {
return getSnackbar(view, text, type, Snackbar.LENGTH_SHORT);
}
/**
* long duration
*
* @param view
* @param text
* @return
*/
public static Snackbar longSnackbar(View view, CharSequence text) {
return shortSnackbar(view, text, 0);
}
/**
* long duration
*
* @param view
* @param text
* @param type
* @return
*/
public static Snackbar longSnackbar(View view, CharSequence text, int type) {
return getSnackbar(view, text, type, Snackbar.LENGTH_LONG);
}
/**
* get snackbar
*
* @param view
* @param text
* @param type
* @param duration
* @return
*/
private static Snackbar getSnackbar(View view, CharSequence text, int type, int duration) {
Snackbar snackbar = Snackbar.make(view, text, Snackbar.LENGTH_SHORT);
if (type > 0)
switchType(snackbar, type);
return snackbar;
}
/**
* set color by snackbar type
*
* @param snackbar
* @param type
*/
private static void switchType(Snackbar snackbar, int type) {
switch (type) {
case I:
setSnackbarBgColor(snackbar, BLUE);
break;
case D:
setSnackbarBgColor(snackbar, GREEN);
break;
case W:
setSnackbarBgColor(snackbar, ORANGE);
break;
case E:
setSnackbarBgColor(snackbar, RED);
break;
}
}
/**
* set snackbar background color
*
* @param snackbar
* @param color
*/
private static void setSnackbarBgColor(Snackbar snackbar, int color) {
if (snackbar == null)
return;
View view = snackbar.getView();
if (view == null)
return;
view.setBackgroundColor(color);
}
}