前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Base封装(二)-- 封装属于自己的Library(UI篇)

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

作者头像
Hankkin
发布2018-09-06 18:20:54
5590
发布2018-09-06 18:20:54
举报
文章被收录于专栏:Android干货园Android干货园

版权声明:本文为博主原创文章,转载请标明出处。 https://cloud.tencent.com/developer/article/1331045

绪论

之前分享了一篇 Base封装(一)–我的最简MVP架构简单的封装了自己的MVP架构,至于BaseActivity和BaseFragment之前的文章都已经分享过了,只不过做了一些优化。接下来继续分享我的封装之路,今天要分享的是常用的UI,同样大家看到不合适的地方多多指正啊..

常用组件

在写一个APP的时候我们通常都会用到一些常用的组件,慢慢的积累下来了就存到自己的库里面,以后写项目的时候就不用再去到处找了,下面看看我收藏了哪些常用的组件吧

1.NoScrollListView、NoScrollGridView、NoScrollViewPager控制不可滑动的组件

我们在某种嵌套下我们可能需要去处理滑动冲突,这三个是我经常会用到的,当然已经改用RecycleView很久了,所以前两个不会再用了,至于NoScrollViewPager我经常会用到的场景就是在ViewPager里嵌套ViewPager可能会用到,代码我就不贴了,在项目里面都会有的。实现思路也很简单:

NoScrollListView和NoScrollGridView的实现思路就是继承ListView和GridView重写OnMeasure()方法,但是估计很多人都说不出来原理吧。

代码语言:javascript
复制
@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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年06月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 绪论
  • 常用组件
    • 1.NoScrollListView、NoScrollGridView、NoScrollViewPager控制不可滑动的组件
      • 2. CircleImageView
        • 3.ProgressBar
          • 4.统一的Dialog
            • 5.下拉刷新、上拉加载
              • 6.Picker组件
                • 7…….
                • 资源篇
                  • 1.命名规范
                    • WHAT(是什么)
                    • WHERE(在何处)
                    • DESCRIPTION(描述)
                    • SIZE(大小)可选
                相关产品与服务
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档