private Snackbar(ViewGroup parent) { mTargetParent = parent; mContext = parent.getContext(); ThemeUtils.checkAppCompatTheme(mContext); LayoutInflater inflater = LayoutInflater.from(mContext); mView = (SnackbarLayout) inflater.inflate( R.layout.design_layout_snackbar, mTargetParent, false);}
最后一行的是不是很熟悉,我们可不可以认为的布局就是这么加载的,这个是在内部定义的一个继承自的内部类:
public static class SnackbarLayout extends LinearLayout { private TextView mMessageView; private Button mActionView; private int mMaxWidth; private int mMaxInlineActionWidth;
看到这几个变量的定义,我已经确定了上面的想法,接下来我们找到上面代码加载的那段布局:
看到这两个控件的ID了么
android:id="@+id/snackbar_text"android:id="@+id/snackbar_action"
public View getView ()Returns the Snackbar's view.
这个方法可以返回我们的View,那么这个View是什么,看源码:
那么第一个就是左边显示的,第二个就是我们设置了时候显示的咯,这就简单了,如果你仔细看了上面提供的API文档你会发现有这么一个方法:
/** * Returns the {@link Snackbar}'s view. */@NonNull public View getView() { return mView; }
找一下mView在哪里定义的:
private final SnackbarLayout mView;mView = (SnackbarLayout) inflater.inflate( R.layout.design_layout_snackbar, mTargetParent, false);
好了,这下一切都清楚了,接下里示范一下怎么自定义你自己的:
private View view; ....省略中间代码view = mCustomSnackBar.getView();if (view != null) { view.setBackgroundColor(Color.parseColor("#7B68EE"));//获取Snackbar的message控件,修改字体颜色 ((TextView)view.findViewById(R.id.snackbar_text)).setTextColor(Color.parseColor("#FFDAB9")); //添加图标 Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) view; //添加自定义布局,这里布局就包含了一个ImageView //custom_layout是你自定义的布局 View add_view = LayoutInflater.from(view.getContext()).inflate(R.layout.custom_layout, null); LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); p.gravity = Gravity.CENTER_VERTICAL; //数字表示新加的布局在SnackBar中的位置,从0开始,取决于你SnackBar里面有多少个子View snackbarLayout.addView(add_view, 0, p); }
最后一行,方法第二个参数表示新加的布局在中的位置,注意不要超过总的View的个数不然会报错,和 text分别算一个View,其他的话注释已经写得很清楚就不一一解释了,这个代码呈现的效果如下:
文章插图
这里写图片描述
项目源码
项目地址
另外,最近做了一个小Demo,主要是使用了 的View爆炸效果,效果图如下:
- linux 高级指令,Linux高级指令
- 不知道密码怎么联网手机,安卓手机锁屏密码忘记了,怎么办?
- 下载app下载,手机安卓系统怎么下载APP
- 2.安装DelayExchange插件
- 一按就能时停的怀表安卓,泰拉瑞亚安卓版怎么制作怀表
- 关于安卓中的 shouldOverrideUrlLoading 方法的问题
- 百元手机排行榜2020前十名,百元安卓手机推荐
- 可以把应用换名字的软件,怎么修改安卓应用软件名称?
- vsco为什么安卓用不了
- ipad用安卓充电器的头充电可以吗