Android新控件Snackbar的介绍以及使用

Android5.0以后谷歌大力推崇Material Design设计,而snackbar就是其中之一了。

Snackbar可以说是Toast的升级版,不仅有显示信息的功能,还可以添加一个Action,实现点击功能,可以右滑删除。

Snackbar是design support library中一个组件,使用Snackbar可以在屏幕底部弹出消息,它和Toast非常相似,

但是就灵活性而言可能比toast灵活一些但是毕竟是新出的组件,也是google新的尝试就扩展性而言我觉得还不够好,相信google会陆续把他完善的越来越好。那好首先看看怎么使用snackbar。

初始化

@NonNull
public static Snackbar make(@NonNull View view, @NonNull CharSequence text,
        @Duration int duration) {
    Snackbar snackbar = new Snackbar(findSuitableParent(view));
    snackbar.setText(text);
    snackbar.setDuration(duration);
    return snackbar;
}


  • make()方法的第一个参数是一个view, snackbar会试着寻找一个父view来hold这个view. Snackbar将遍历整个view tree 来寻找一个合适的父view,它可能是一个coordinatorLayout也可能是window decor’s content view,随便哪一个都行。
  • 第二个参数是索要提示的内容
  • 第三个参数,duration参数和Toast中的duration参数类似,只能是LENGTH_SHORT 或 LENGTH_LONG,不能是其它任何随机数。
对于snackbar的构建有点类似于dialog的我们可以一路点下去构建自己想要的效果

Snackbar.make(ivImage,"back",Snackbar.LENGTH_SHORT).setActionTextColor(Color.parseColor("#5eab1f")).setCallback(new Snackbar.Callback() {
    @Override
    public void onDismissed(Snackbar snackbar, int event) {
        Toast.makeText(SecondActivity.this,"我消失了",Toast.LENGTH_SHORT).show();
        super.onDismissed(snackbar, event);
    }

    @Override
    public void onShown(Snackbar snackbar) {
        Toast.makeText(SecondActivity.this,"我出现了",Toast.LENGTH_SHORT).show();
        super.onShown(snackbar);
    }


}).setAction("Action", new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent mIntent=new Intent(SecondActivity.this,ThirdActivity.class);
        startActivity(mIntent);
       // Toast.makeText(SecondActivity.this,"OK",Toast.LENGTH_SHORT).show();
    }
}).show();
setAction可以给snackbar添加一个action 然后可以做一些自己的操作,

setActionTextColor 是设置action按钮的颜色

其余的可以根据自己具体需求做添加还有就是最后要调用show()方法。

一般的再用snackbar的时候都会使用到FloatingActionButton

当然你完全可以不使用这个新的空间,可以在按钮的点击的监听事件中去使用snackbar,开篇也说过了snackbar是toast的增强版。


我们来看一下效果


在这不仅改变了action按钮字的颜色还改变了文本的颜色以及文本的背景,但是在api中并没哟给我们提供方法去改变文本,所以扒开源码看看

/**
 * Returns the {@link Snackbar}'s view.
 */
@NonNull
public View getView() {
    return mView;
}
看到这个 返回的是一个view而且是snackbar的布局view么这就好办了。

View view = snackbar.getView();
        TextView v=((TextView) view.findViewById(R.id.snackbar_text));
//        LinearLayout.LayoutParams parmars=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
//        parmars.leftMargin=-16;
//        parmars.setMargins(-16,0,-16,0);
//        v.setLayoutParams(parmars);
        v .setTextColor(color);
        v.setGravity(Gravity.CENTER);
        v.setBackgroundResource(R.drawable.ic_launcher);
        v.setBackgroundColor(Color.parseColor("#ffffff"));
TextView v=((TextView) view.findViewById(R.id.snackbar_text));
返回的就是snackbar的文本view既然我们已经取到布局那么更改颜色,文字颜色神马的,不是分分钟的事。当然你也可以更改action按钮的。这里就不列举了。

最后给出snackbar的布局

//    <merge xmlns:android="http://schemas.android.com/apk/res/android">
//
//    <TextView
//    android:id="@+id/snackbar_text"
//    android:layout_width="wrap_content"
//    android:layout_height="wrap_content"
//    android:layout_weight="1"
//    android:paddingTop="@dimen/design_snackbar_padding_vertical"
//    android:paddingBottom="@dimen/design_snackbar_padding_vertical"
//    android:paddingLeft="@dimen/design_snackbar_padding_horizontal"
//    android:paddingRight="@dimen/design_snackbar_padding_horizontal"
//    android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
//    android:maxLines="@integer/design_snackbar_text_max_lines"
//    android:layout_gravity="center_vertical|left|start"
//    android:ellipsize="end"/>
//
//    <Button
//    android:id="@+id/snackbar_action"
//    android:layout_width="wrap_content"
//    android:layout_height="wrap_content"
//    android:layout_marginLeft="@dimen/design_snackbar_extra_spacing_horizontal"
//    android:layout_marginStart="@dimen/design_snackbar_extra_spacing_horizontal"
//    android:layout_gravity="center_vertical|right|end"
//    android:paddingTop="@dimen/design_snackbar_padding_vertical"
//    android:paddingBottom="@dimen/design_snackbar_padding_vertical"
//    android:paddingLeft="@dimen/design_snackbar_padding_horizontal"
//    android:paddingRight="@dimen/design_snackbar_padding_horizontal"
//    android:visibility="gone"
//    android:textColor="?attr/colorAccent"
//    style="?attr/borderlessButtonStyle"/>
//    </merge>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值