一站式开发一个安卓APP-开发篇(4、日期天气组件开发)

[上一篇]把自定义电池组件搞定了。

这篇看一下怎么搞一个复杂一点的自定义组件:日期天气组件。

效果图:

一站式开发一个安卓APP-开发篇(4、日期天气组件开发)
上一篇的电池组件是通过重写View的onDraw来实现,这种方法对比较简单的组件来说是实用的。而如果对于日期天气组件来说,就没必要了。

可以通过自定义View继承一个容器组件(比如RelativeLayout)加上提前布局好的xml文件来实现。这样会简单很多。

当然,这种视图组件,其实不用自定义组件也能实现,只是通过组件封装,可以方便多出调用,减少代码重复。

具体的实现方式很简单,不再赘述,需要的可以直接在github看源码

实现很简单,但是要优化到好用,还是要仔细琢磨一下的,这里有几个小细节有必要分享一下:

  • 仔细看一下这个组件,有好几个部分组成:1、日期时间(公历和农历,时间,需要实时刷新)2、GPS定位城市,3、当前城市的天气。
  • 在实际使用过程中,天气信息的获取依赖城市定位,也就是需要定位到城市后才能去拿当前城市的天气。如果不做缓存处理,就会比较慢,体验很不好,所以需要把城市和天气数据缓存起来,这样就只有第一次会稍微慢一点。后面基本感受不到变化。

做产品只有把细节处理好,才能把可用变成好用。

说到这里,常用应用APP组件也是有一个细节需要注意的(顺便提一下)。

常用应用组件截图:
一站式开发一个安卓APP-开发篇(4、日期天气组件开发)
组件是个RecyclerView,应用图标是从系统安装应用列表中读取,在持久化保存配置信息时是不保存图标的,只保存名字,这样会造成显示时需要临时读取应用图标,如果直接在Adapter里读取,会阻塞UI显示,有卡顿的现象,因为系统应用可能上百个,比较耗时。所以这里做了两个处理:

  • 第一是线程读取图标;
  • 第二是缓存系统应用列表,避免重复检索;

源码地址:https://github.com/luoxizhong/LockScreen-ElderlyScreen