美文网首页
使用效果更好的Snackbar替代过时的Toast

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

作者: DOG1994 | 来源:发表于2017-03-14 11:38 被阅读0次

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

    }

    }

    相关文章

      网友评论

          本文标题:使用效果更好的Snackbar替代过时的Toast

          本文链接:https://www.haomeiwen.com/subject/bqgcnttx.html