美文网首页Android知识Android开发经验谈Android开发
Base封装(二)-- 封装属于自己的Library(UI篇)

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

作者: Hankkinn | 来源:发表于2017-06-21 18:44 被阅读391次

    绪论

    之前分享了一篇 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需要你定制的话那就自己自定义一个,如果不需要我一直用的都是之前找到的一个感觉挺好的,仿简书的样子

    4.统一的Dialog

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

    5.下拉刷新、上拉加载

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

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

    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

    https://github.com/Hankkin/HBase

    相关文章

      网友评论

        本文标题:Base封装(二)-- 封装属于自己的Library(UI篇)

        本文链接:https://www.haomeiwen.com/subject/ommtcxtx.html