MaterialDesign系列文章(十四)SnackBar的使用

不怕跌倒,所以飞翔

特别感谢:
简名的没时间解释了,快使用Snackbar!——Android Snackbar花式使用指南

SnackBar 取代了Toast的使用,而且比Toast功能更加强大.使用Snackbar要导入com.android.support:design库。
Snackbar显示在所有屏幕其它元素之上(屏幕最顶层),同一时间只能显示一个snackbar。如果配合CoordinatorLayout可以实现侧滑的效果,这个是CoordinatorLayout和SnackBar配合自己带的效果

1.简单使用:

API介绍

  • make 这个方法是构建SnackBar对象的
    • LENGTH_INDEFINITE 一直显示
    • LENGTH_SHORT 短时间显示
    • LENGTH_LONG 长时间显示
  • setActionTextColor 设置snackBar上面显示的文字颜色
  • setAction 设置一个可以点击的区域的
  • addCallback 设置一个回调的(回调中包含snackBar弹出时的回调和关闭时候的回调)
  • show 展示snackBar
    基本的API我觉得就这么多,下面通过一个例子说明一下吧!
        Snackbar snackbar = Snackbar.make(view, "It is SnackBar", Snackbar.LENGTH_INDEFINITE);
        snackbar.getView().setBackgroundResource(R.color.colorAccent);
        snackbar.setActionTextColor(Color.parseColor("#332244"));
        snackbar.setAction("点击", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(SnackBarActivity.this, "点击了这个按钮", Toast.LENGTH_SHORT).show();
            }
        });
        snackbar.addCallback(new Snackbar.Callback() {
            @Override
            public void onShown(Snackbar sb) {/*这个是开始出来的时候调用的方法*/
                super.onShown(sb);
                Toast.makeText(SnackBarActivity.this, "Snackbar show", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onDismissed(Snackbar transientBottomBar, int event) {/*这个是退出页面时候调用的方法*/
                super.onDismissed(transientBottomBar, event);
                Toast.makeText(SnackBarActivity.this, "Snackbar dismiss", Toast.LENGTH_SHORT).show();
            }
        });
        snackbar.show();

一些特殊的使用方法

1.改变Snnackbar的颜色的方法

可以通过snackbar.getView()获取到相应的View设置背景颜色

public static void setSnackbarColor(Snackbar snackbar, int messageColor, int backgroundColor) {
    View view = snackbar.getView();//获取Snackbar的view
    if(view!=null){
        view.setBackgroundColor(backgroundColor);//修改view的背景色
        ((TextView) view.findViewById(R.id.snackbar_text)).setTextColor(messageColor);//获取Snackbar的message控件,修改字体颜色
    }
}

2.在Snackbar中增加图标

其实就是拿到内部的View以代码的形式动态添加了一个布局

public static void SnackbarAddView(Snackbar snackbar,int layoutId,int index) {
    View snackbarview = snackbar.getView();//获取snackbar的View(其实就是SnackbarLayout)

    Snackbar.SnackbarLayout snackbarLayout=(Snackbar.SnackbarLayout)snackbarview;//将获取的View转换成SnackbarLayout

    View add_view = LayoutInflater.from(snackbarview.getContext()).inflate(layoutId,null);//加载布局文件新建View

    LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);//设置新建布局参数

    p.gravity= Gravity.CENTER_VERTICAL;//设置新建布局在Snackbar内垂直居中显示

    snackbarLayout.addView(add_view,index,p);//将新建布局添加进snackbarLayout相应位置
}

简名写的一个工具类

/**
 * Created by 赵晨璞 on 2016/5/1.
 */
public class SnackbarUtil {

public static final   int Info = 1;
public static final  int Confirm = 2;
public static final  int Warning = 3;
public static final  int Alert = 4;


public static  int red = 0xfff44336;
public static  int green = 0xff4caf50;
public static  int blue = 0xff2195f3;
public static  int orange = 0xffffc107;

/**
 * 短显示Snackbar,自定义颜色
 * @param view
 * @param message
 * @param messageColor
 * @param backgroundColor
 * @return
 */
public static Snackbar ShortSnackbar(View view, String message, int messageColor, int backgroundColor){
    Snackbar snackbar = Snackbar.make(view,message, Snackbar.LENGTH_SHORT);
    setSnackbarColor(snackbar,messageColor,backgroundColor);
    return snackbar;
}

/**
 * 长显示Snackbar,自定义颜色
 * @param view
 * @param message
 * @param messageColor
 * @param backgroundColor
 * @return
 */
public static Snackbar LongSnackbar(View view, String message, int messageColor, int backgroundColor){
    Snackbar snackbar = Snackbar.make(view,message, Snackbar.LENGTH_LONG);
    setSnackbarColor(snackbar,messageColor,backgroundColor);
    return snackbar;
}

/**
 * 自定义时常显示Snackbar,自定义颜色
 * @param view
 * @param message
 * @param messageColor
 * @param backgroundColor
 * @return
 */
public static Snackbar IndefiniteSnackbar(View view, String message,int duration,int messageColor, int backgroundColor){
    Snackbar snackbar = Snackbar.make(view,message, Snackbar.LENGTH_INDEFINITE).setDuration(duration);
    setSnackbarColor(snackbar,messageColor,backgroundColor);
    return snackbar;
}

/**
 * 短显示Snackbar,可选预设类型
 * @param view
 * @param message
 * @param type
 * @return
 */
public static Snackbar ShortSnackbar(View view, String message, int type){
    Snackbar snackbar = Snackbar.make(view,message, Snackbar.LENGTH_SHORT);
    switchType(snackbar,type);
    return snackbar;
}

/**
 * 长显示Snackbar,可选预设类型
 * @param view
 * @param message
 * @param type
 * @return
 */
public static Snackbar LongSnackbar(View view, String message,int type){
    Snackbar snackbar = Snackbar.make(view,message, Snackbar.LENGTH_LONG);
    switchType(snackbar,type);
    return snackbar;
}

/**
 * 自定义时常显示Snackbar,可选预设类型
 * @param view
 * @param message
 * @param type
 * @return
 */
public static Snackbar IndefiniteSnackbar(View view, String message,int duration,int type){
    Snackbar snackbar = Snackbar.make(view,message, Snackbar.LENGTH_INDEFINITE).setDuration(duration);
    switchType(snackbar,type);
    return snackbar;
}

//选择预设类型
private static void switchType(Snackbar snackbar,int type){
    switch (type){
        case Info:
            setSnackbarColor(snackbar,blue);
            break;
        case Confirm:
            setSnackbarColor(snackbar,green);
            break;
        case Warning:
            setSnackbarColor(snackbar,orange);
            break;
        case Alert:
            setSnackbarColor(snackbar,Color.YELLOW,red);
            break;
    }
}

/**
 * 设置Snackbar背景颜色
 * @param snackbar
 * @param backgroundColor
 */
public static void setSnackbarColor(Snackbar snackbar, int backgroundColor) {
    View view = snackbar.getView();
    if(view!=null){
        view.setBackgroundColor(backgroundColor);
    }
}

/**
 * 设置Snackbar文字和背景颜色
 * @param snackbar
 * @param messageColor
 * @param backgroundColor
 */
public static void setSnackbarColor(Snackbar snackbar, int messageColor, int backgroundColor) {
    View view = snackbar.getView();
    if(view!=null){
        view.setBackgroundColor(backgroundColor);
        ((TextView) view.findViewById(R.id.snackbar_text)).setTextColor(messageColor);
    }
}

/**
 * 向Snackbar中添加view
 * @param snackbar
 * @param layoutId
 * @param index 新加布局在Snackbar中的位置
 */
public static void SnackbarAddView( Snackbar snackbar,int layoutId,int index) {
    View snackbarview = snackbar.getView();
    Snackbar.SnackbarLayout snackbarLayout=(Snackbar.SnackbarLayout)snackbarview;

    View add_view = LayoutInflater.from(snackbarview.getContext()).inflate(layoutId,null);

    LinearLayout.LayoutParams p = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
    p.gravity= Gravity.CENTER_VERTICAL;

    snackbarLayout.addView(add_view,index,p);
}
}

这一系列文章的地址,希望对大家有帮助

  • MaterialDesign系列文章(一)转场动画

  • MaterialDesign系列文章(二)Theme主题设置

  • MaterialDesign系列文章(三)Palette库来获取图片的主要色彩

  • MaterialDesign系列文章(四)RecealAnimation动画的使用

  • MaterialDesign系列文章(五)ToolBar的使用

  • MaterialDesign系列文章(六)沉浸式状态栏的使用

  • MaterialDesign系列文章(七)TabLayout的使用

  • MaterialDesign系列文章(八)CollapsingToolbarLayout的使用

  • MaterialDesign系列文章(九)AppBarLayout的使用

  • MaterialDesign系列文章(十)NavigationView和DrawerLayout的使用

  • MaterialDesign系列文章(十一)NestedScrollView的使用

  • MaterialDesign系列文章(十二)TextInputLayout的使用

  • MaterialDesign系列文章(十三)FloatingActionButton的使用

  • MaterialDesign系列文章(十四)SnackBar的使用

  • MaterialDesign系列文章(十五)BottomSheet的使用

  • MaterialDesign系列文章(十六)BottomNavigationView的使用

  • MaterialDesign系列文章(十七)Behavior的相关问题

  • CoordinatorLayout的分析

项目地址

你可能感兴趣的:(MaterialDesign系列文章(十四)SnackBar的使用)