Base封装(二)-- 封装属于自己的Library(UI篇)

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/73554768

绪论

之前分享了一篇 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三种

  1. EXACTLY
    表示父视图希望子视图的大小应该是由specSize的值来决定的,系统默认会按照这个规则来设置子视图的大小,开发人员当然也可以按照自己的意愿设置成任意的大小。
  2. AT_MOST
    表示子视图最多只能是specSize中指定的大小,开发人员应该尽可能小得去设置这个视图,并且保证不会超过specSize。系统默认会按照这个规则来设置子视图的大小,开发人员当然也可以按照自己的意愿设置成任意的大小。
  3. UNSPECIFIED
    表示开发人员可以将视图按照自己的意愿设置成任意的大小,没有任何限制。这种情况比较少见,不太会用到。

具体解析大家可以看看这篇文章http://blog.csdn.net/xuefu_78/article/details/51760585
从源码角度进行分析的

至于NoScrollViewPager就是拦截OnTouch事件就行了。

2. CircleImageView

圆形的头像ImageView我一直都用的是这个
https://github.com/hdodenhof/CircleImageView

3.ProgressBar

对于loading加载框这个网上已经有很多了,各式各样的,如果UI需要你定制的话那就自己自定义一个,如果不需要我一直用的都是之前找到的一个感觉挺好的,仿简书的样子

Base封装(二)-- 封装属于自己的Library(UI篇)

4.统一的Dialog

Dialog的样式也有很多,一般常用的提示类的个人还是喜欢Android原生态的那种MD风格的Dialog,一直以来用的都是
com.github.afollestad.material-dialogs

5.下拉刷新、上拉加载

说到这个真的是有很多很多了,以前的PullToRefresh到现在的SwipeRefresgLayout,网上的资源很多,看个人喜好,分享一个下拉刷新集合,需要的拿去吧

众多优秀的下拉刷新(除了我写的之外T_T)

6.Picker组件

7…….

还有一些就不具体介绍了,我会把我的库上传到Github
好了下面介绍一下相关资源的东西

资源篇

1.命名规范

对于命名规范这个东西一直来说都是一个头疼的东西,随着项目的更新迭代,各式各样的命名都出来了,有时候为了进度,命名就随意来了,写的时候想着先把功能搞完回来再改,但是当你真的一点一点累加起来之后你才会发现天呐,这该怎么改,资源在哪里使用了,即使你的IDE功能再强大,当你去找那些资源文件的时候也会很头疼,所以下面介绍一下一直以来我用的命名规范:

Base封装(二)-- 封装属于自己的Library(UI篇)

就是这个原理图

WHAT(是什么)

表明资源实际代表什么,通常是一个标准的android view,资源类型选项有限。

(例如:MainActivity->activity)

WHERE(在何处)

描述它在app的逻辑模块,如果在多个页面用到使用all,其他的就用 使用该资源的页面所处的逻辑模块

(例如:MainActiviy->main,ArticleDetailFragment->articledetail)

DESCRIPTION(描述)

用来区分一个页面中多个相同元素

(例如:title)

SIZE(大小)可选

一个精确的大小或尺寸,可用于drawables和dimensions

(例如:24dp,small)

详情请参考
一种成功的xml资源命名规范

代码已经上传到我的Github

https://github.com/Hankkin/HBase

上一篇:混合云的性能管理状态


下一篇:Android开发之路--(2)--Android四大组件