绪论
之前分享了一篇 Base封装(一)–我的最简MVP架构简单的封装了自己的MVP架构,至于BaseActivity和BaseFragment之前的文章都已经分享过了,只不过做了一些优化。接下来继续分享我的封装之路,今天要分享的是常用的UI,同样大家看到不合适的地方多多指正啊..
常用组件
在写一个APP的时候我们通常都会用到一些常用的组件,慢慢的积累下来了就存到自己的库里面,以后写项目的时候就不用再去到处找了,下面看看我收藏了哪些常用的组件吧
1.NoScrollListView、NoScrollGridView、NoScrollViewPager控制不可滑动的组件
我们在某种嵌套下我们可能需要去处理滑动冲突,这三个是我经常会用到的,当然已经改用RecycleView很久了,所以前两个不会再用了,至于NoScrollViewPager我经常会用到的场景就是在ViewPager里嵌套ViewPager可能会用到,代码我就不贴了,在项目里面都会有的。实现思路也很简单:
NoScrollListView和NoScrollGridView的实现思路就是继承ListView和GridView重写OnMeasure()方法,但是估计很多人都说不出来原理吧。
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
如上所示,makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST)
这两个参数分别代表着
size:表示福布局提供给你的大小参考
model:表示测量规则,共有EXACTLY、AT_MOST、UNSPECIFIED三种
- EXACTLY
表示父视图希望子视图的大小应该是由specSize的值来决定的,系统默认会按照这个规则来设置子视图的大小,开发人员当然也可以按照自己的意愿设置成任意的大小。 - AT_MOST
表示子视图最多只能是specSize中指定的大小,开发人员应该尽可能小得去设置这个视图,并且保证不会超过specSize。系统默认会按照这个规则来设置子视图的大小,开发人员当然也可以按照自己的意愿设置成任意的大小。 - UNSPECIFIED
表示开发人员可以将视图按照自己的意愿设置成任意的大小,没有任何限制。这种情况比较少见,不太会用到。
具体解析大家可以看看这篇文章http://blog.csdn.net/xuefu_78/article/details/51760585
从源码角度进行分析的
至于NoScrollViewPager就是拦截OnTouch事件就行了。
2. CircleImageView
圆形的头像ImageView我一直都用的是这个
https://github.com/hdodenhof/CircleImageView
3.ProgressBar
对于loading加载框这个网上已经有很多了,各式各样的,如果UI需要你定制的话那就自己自定义一个,如果不需要我一直用的都是之前找到的一个感觉挺好的,仿简书的样子
4.统一的Dialog
Dialog的样式也有很多,一般常用的提示类的个人还是喜欢Android原生态的那种MD风格的Dialog,一直以来用的都是
com.github.afollestad.material-dialogs
5.下拉刷新、上拉加载
说到这个真的是有很多很多了,以前的PullToRefresh到现在的SwipeRefresgLayout,网上的资源很多,看个人喜好,分享一个下拉刷新集合,需要的拿去吧
6.Picker组件
7…….
还有一些就不具体介绍了,我会把我的库上传到Github
好了下面介绍一下相关资源的东西
资源篇
1.命名规范
对于命名规范这个东西一直来说都是一个头疼的东西,随着项目的更新迭代,各式各样的命名都出来了,有时候为了进度,命名就随意来了,写的时候想着先把功能搞完回来再改,但是当你真的一点一点累加起来之后你才会发现天呐,这该怎么改,资源在哪里使用了,即使你的IDE功能再强大,当你去找那些资源文件的时候也会很头疼,所以下面介绍一下一直以来我用的命名规范:
就是这个原理图
WHAT(是什么)
表明资源实际代表什么,通常是一个标准的android view,资源类型选项有限。
(例如:MainActivity->activity)
WHERE(在何处)
描述它在app的逻辑模块,如果在多个页面用到使用all,其他的就用 使用该资源的页面所处的逻辑模块
(例如:MainActiviy->main,ArticleDetailFragment->articledetail)
DESCRIPTION(描述)
用来区分一个页面中多个相同元素
(例如:title)
SIZE(大小)可选
一个精确的大小或尺寸,可用于drawables和dimensions
(例如:24dp,small)
详情请参考
一种成功的xml资源命名规范
代码已经上传到我的Github