Ernest的Blog

一个有理想的Android程序员

0%

Linux 命令手册安卓版

前两天逛GitHub时候发现了一个命令行手册项目jaywcjlove/linux-command 手册网站,觉得非常实用。GitHub的Pages很方便,但是国内访问有时候比较慢。虽然网上类似的在线手册很多了,但是我觉得一个手册应该是随手可用,而且即使在没有网时候,也可随时翻阅的。于是打算用一天半天把手册做成个离线版简易手册APP。

准备工作

翻了一下GitHub上项目的README,发现作者很贴心的把爬虫抓到的数据保存成MarkDown格式了。不得不说一下,MarkDown是程序员最喜欢的文档格式之一。把项目clone到本地,手册的数据来源就准备好了。再次 感谢作者的辛勤付出。

MarkDown解析

安卓没有原生支持MarkDown的控件,在GitHub上用markdown为关键字搜了一下,pegdown 这个MarkDownn解析库是最多star的。遗憾的是,尽管目前仍然是最流行的MarkDown解析库之一,作者在三个多月前声明这个项目停止维护了。不过作者推荐了@vschflex-mark-java,另一个性能优越的markdown解析库。

flexmark-java解析架构基于commonmark-java,另一款解析库(开源的世界就是这么任性啊),想到罗永浩的那句生命不息,折腾不止,决定先用commonmark-java解析,后面再切换到flexmark-java。尽管是最简单的引用,并没有怎么折腾。

搜索功能

手册的数据,解析都准备好了,还有一个手册必不可少的功能——搜索。以前做项目的时候都是用EditText+Button来实现搜索功能的。虽然一直知道安卓有个原生的searchView,但是项目做视觉设计的小伙伴设计出来的视觉不给searchView用武之地。自从进TV应用开发的坑后,也好久没有开发手机APP了。基于这两个原因,决定在这个小应用中学习一下searchView的使用。
计划实现的是带搜索建议的searchView,这样可以尽量的简化在手机上的输入。searchView的配置很简单,但是搜索建议需要有一定的学习。
安卓现在推荐的是ActionBar中搜索,除了要增加一点actionView的配置,其他的跟searchView大同小异。正所谓磨刀不误砍柴工,何况之前没有系统的学习过searchView,于是开始找百度,找博客补习功课。
以searchView搜索看了几篇配置博文后,发现一个博客把谷歌的searchView介绍做了一个专题的介绍,于是把这几篇文章细读了一遍。在读这几篇译文的时候想起很多大牛的教导,要读就读一手的文档,最好是出自代码作者之手的,再次一点就是读一手文档的翻译。除了这两种文章干货较多,其他类型的文章往往介绍得不够全面。
英文原文(需要翻墙)
译文第一篇:[Searchable(一)](剩下的几篇链接就不贴了,在文末有上下篇的链接跳转)

依照译文的介绍,我对搜索功能有了大概的方向。主要做了以下几点:

  • 把前面获取到的MD文件放到assets目录下,用AssetsManager进行管理,这样就可以不用数据库了。展示命令详情的时候,也可以直接读取到命令对应文件流,再方便不过了。
  • searchView的搜索建议需要有一个ContentProvider来提供搜索建议的数据源,没有数据库怎么用ContentProvider? 答案是MatrixCursorMatrixCursor可以做到模拟数据库的作用,也提供方法方便插入数据等。
  • 有了实现ContentProvider的思路,只需把AssetsManager获取到的命令文件名作为数据,提供给searchView来查询就可以了。

总结

手册的实现并没有什么难度,在补充了相关的知识后,只需要不到半天的时间就可以搞定了。项目虽小,但是还是给我不少收获的。之前看到有一篇文章,名字叫《提问的智慧》。搜索其实就是向机器提问的一种方式,科学的搜索关键词,合适的网站搜索事半功倍。搜索还是首选 Google.comstackoverflow.com

项目地址:
GitHub
coding.net