老规矩,先上图
大家都知道这是由floatingactionbutton+snackbar组合实现的,其实网上都会说snackbar和toast一样是一个轻量级的用户交互控件,所以自定义布局没啥意义,那么到底可不可以实现呢?答案是肯定的,而且很easy。
floatbtn = view.findViewById(R.id.item_introduct_fab);
floatbtn.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onClick(View v) {
initMySnackbar(v);
}
});
initMySnackbar()实现如下:
private void initMySnackbar(View v) {
//初始化一个snackbar
Snackbar snackbar = Snackbar.make(v,"",Snackbar.LENGTH_LONG);
//修改snackbar的背景颜色
snackbar.getView().setBackgroundColor(getResources().getColor(R.color.gray_100));
//获取snackbar的源布局
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
//隐藏源布局的控件
TextView textView = (TextView) layout.findViewById(android.support.design.R.id.snackbar_text);
textView.setVisibility(View.INVISIBLE);
//获取自定义view
View snackView = LayoutInflater.from(getContext()).inflate(R.layout.my_snackbar, null);
ImageView qqshare = snackView.findViewById(R.id.my_snackbar_qqshare);
qqshare.setOnClickListener(this);
ImageView zoneshare = snackView.findViewById(R.id.my_snackbar_zoneshare);
zoneshare.setOnClickListener(this);
ImageView wechatshare = snackView.findViewById(R.id.my_snackbar_wechatshare);
wechatshare.setOnClickListener(this);
ImageView sinashare = snackView.findViewById(R.id.my_snackbar_sinashare);
sinashare.setOnClickListener(this);
//添加自定义布局到SnackbarLayout
layout.addView(snackView, 0);
//显示snackbar
snackbar.show();
}
Snackbar.SnackbarLayout,它是一个水平LinearLayout对象,其子对象是一个TextView和一个Button。我们只需隐藏的TextView,并将您的视图添加到Snackbar.SnackbarLayout。