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.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>