4.Android support design Snackbar
来源:互联网 发布:网络会计授课教师招聘 编辑:程序博客网 时间:2024/05/18 03:53
4.Android support design Snackbar
- Android support design Snackbar
- Snackbar介绍
- gradle配置
- 使用Snackbar
- Snackbar Action点击事件
- Snackbar设置内容
- Snackbar设置Action文本颜色
- Snackbar显示和隐藏
- 解析Snackbarmake中的参数View
- 非CoordinatorLayout父视图的效果
- 存在CoordinatorLayout父视图的效果
Snackbar介绍
在Android中提示信息的控件主要用Toast或者Dialog,当然也有自定义的View,各种自定义Dialog或者Toast。
这里将介绍一种比Toast重,比Dialog轻的控件,它叫Snackbar。
同样是Android support design Library中的一员,而它却显得非常自由,不需要XML布局文件的设置,这就跟Toast像极了。说它是Toast的升级版也可以,因为它的功能要比Toast丰富。
gradle配置
compile 'com.android.support:design:23.0.1'
或者更高版本
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:design:23.0.1'}
使用Snackbar
Snackbar构造方法 一 Snackbar.make(View view, CharSequence text, int duration)
Snackbar构造方法 二 Snackbar.make(View view, int resId, int duration)
第一个参数View:根据这个View找到Snackbar的恰当父视图来确保显示在底部,以下会进行一点源码解析。
Snackbar.make(view, text, Snackbar.LENGTH_SHORT).setAction("CaMnter", new View.OnClickListener() { @Override public void onClick(View v) { } }).show();
Snackbar Action点击事件
Snackbar设置Action 一 Snackbar.setAction(@StringRes int resId, OnClickListener listener)
Snackbar设置Action 二 Snackbar.setAction(CharSequence text, final OnClickListener listener)
Snackbar弹出后,点击”CaMnter”字,就会响应事件,弹出Toast
Snackbar.make(view, text, Snackbar.LENGTH_SHORT).setAction("CaMnter", new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(SnackbarActivity.this,"Hello World",Toast.LENGTH_LONG).show(); } }).show();
Snackbar设置内容
Snackbar设置内容 一 Snackbar.setText(CharSequence message)
Snackbar设置内容 二 Snackbar..setText(@StringRes int resId)
Snackbar设置Action文本颜色
Snackbar设置Action文本颜色 一 Snackbar.setActionTextColor(int color)
Snackbar设置Action文本颜色 二 Snackbar.setActionTextColor(ColorStateList colors)
Snackbar显示和隐藏
Snackbar显示 Snackbar.show()
Snackbar隐藏 Snackbar.dismiss()
解析Snackbar.make中的参数View
先看两个make方法
public static Snackbar make(View view, CharSequence text, int duration) { Snackbar snackbar = new Snackbar(findSuitableParent(view)); snackbar.setText(text); snackbar.setDuration(duration); return snackbar; } public static Snackbar make(View view, int resId, int duration) { return make(view, view.getResources().getText(resId), duration); }
可以看到拿到View后,第一步就放到findSuitableParent(View view)
方法里了。
在看findSuitableParent(View view)方法
@Nullable private static ViewGroup findSuitableParent(View view) { ViewGroup fallback = null; do { if(view instanceof CoordinatorLayout) { return (ViewGroup)view; } if(view instanceof FrameLayout) { if(view.getId() == 16908290) { return (ViewGroup)view; } fallback = (ViewGroup)view; } if(view != null) { ViewParent parent = view.getParent(); view = parent instanceof View?(View)parent:null; } } while(view != null); return fallback; }
- 第一,走进了一个循环。
- 第二,它优先级找到这个View是不是CoordinatorLayout类型。是,就马上返回。
- 第三,它再次优先级找到FrameLayout。
- 第四,
view.getId() == 16908290
可以判断是否到最外层的View,因为Activity的最外层实质上是FrameLayout,16908290是这个R.id.content的值。 - 第五,
view = parent instanceof View?(View)parent:null;
,开始从新给view赋值,继续走到上一层的View再循环。 - 第六,如果中途一直没找到CoordinatorLayout或者FrameLayout的话,最终会走到顶层的FrameLayout。
最后看看构造方法
Snackbar(ViewGroup parent) { this.mParent = parent; this.mContext = parent.getContext(); LayoutInflater inflater = LayoutInflater.from(this.mContext); this.mView = (Snackbar.SnackbarLayout)inflater.inflate(layout.layout_snackbar, this.mParent, false); }
将刚才findSuitableParent(View view)
方法拿到的View最为inflate
方法的根视图参数,进行初始化Snackbar。
总结:Snackbar.findSuitableParent(View view)
的源码还是挺有意思的。疯狂的寻找CoordinatorLayout和FrameLayout,因为有CoordinatorLayout的父视图上,Snackbar显得更加智能。
非CoordinatorLayout父视图的效果
存在CoordinatorLayout父视图的效果
- 4.Android support design Snackbar
- Android Support Design之Snackbar
- android.support.design.widget.Snackbar 使用
- Android Design Support Library实践之Snackbar
- Android 5.x support.design.widget---Snackbar
- Android Design Support之Snackbar实战
- android.support.design库组件(Snackbar )
- Android Design Support Library - Snackbar使用
- Android Design Support Library(3)- Snackbar的使用
- Android Support Design 库 之 Snackbar使用及源码分析
- Android Support Design 库 之 Snackbar使用及源码分析
- Android Design Support Library--简约而不简单的SnackBar
- Android Design Support Library--简约而不简单的SnackBar
- Android Design Support Library使用详解——Snackbar
- Android Support Design 库 之 Snackbar使用及源码分析
- Android Support Design库之SnackBar初使用
- Android Support Design常用控件Snackbar,FloatingActionButton等
- Android Support Design 库 之 Snackbar使用及源码分析
- Universal Image Loader库使用方法
- 自定义spinner下拉框样式,并实现三级联动
- 单链表的归并排序
- 004-流程控制-C语言笔记
- 某大学期末C语言考试题(附加答案和讲解)
- 4.Android support design Snackbar
- 四种途径将HTML5 web应用变成android应用
- C实现memset函数
- 005-循环结构(上)-C语言笔记
- C语言中得到一个float值在内存中的16进制表示
- 黑马程序员-java
- Waring:Title set but using a system identifier解决办法
- Android 修改项目名称
- 006-循环结构(下)-C语言笔记