使用效果更好的Snackbar替代过时的Toast

2017-03-14  本文已影响0人  DOG1994

对于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);

}

}

上一篇下一篇

猜你喜欢

热点阅读