美文网首页Android_MaterialDesign
MaterialDesign系列文章(十四)SnackBar的使

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

作者: 笔墨Android | 来源:发表于2017-11-08 18:06 被阅读26次

    不怕跌倒,所以飞翔

    特别感谢:
    简名的没时间解释了,快使用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系列文章(十四)SnackBar的使

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