不怕跌倒,所以飞翔
特别感谢:
简名的没时间解释了,快使用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的分析