美文网首页
继续开发安卓浏览器之二:主页书签导航

继续开发安卓浏览器之二:主页书签导航

作者: 天下第九九八十一 | 来源:发表于2021-05-11 21:28 被阅读0次

原本是想模仿Opera那样的模范安卓桌面的主页导航页,已经用 sort.js 模拟了大半部分,包括文件夹动画、多选、拖拽归纳和重命名。

但是单从用 sort.js + css 还没有能力将之模仿得一模一样,而是显得更加简陋一些。而且浏览器中这种基于web技术的dial的面板也有所缺陷:1.批量操作麻烦,Opera 的实现无法多选,自己实现的可以。2.不能显示全部标题。3.不能直接搜索,不过 Opera 支持在搜索框中搜索主页项目。4.基于web,与原网页冲突,显示这个几面会覆盖原网页。5.基于web,数据处理麻烦,读取、修改保存、更新,需要Javascript-java之间多次桥接通信。

Opera 主页

所以虽然 Opera 实现的主页导航很好看,但最终还是没有选择一样的方案,而是选用RecyclerView的TreeViewAdapter来做。

TreeView,树形控件应当是很基准的控件了,连win32都有,安卓怎么可能没有呢?我找来的是署名为 tlh ( TellH/RecyclerTreeView
) 的TreeViewAdapter.java,是用于 RecyclerView 的自定义适配器。

RecyclerView 是安卓最灵活的控件之一,原本是列表,但可以通过自定义适配器、布局管理器,将之改成网格、横着的列表;通过自定义列表项触摸帮助类(ItemTouchHelper),可以让其支持滑动删除、拖拽排序;通过自定义列表项装饰类(addItemDecoration),可以丰富其外观。

TreeViewAdapter 是树形适配器的基本实现,不支持拖拽排序等操作,继承改写后,可让其支持拖拽排序。原本的demo中展开图标的旋转动画也很有问题,需要修改:

app/MainActivity.java#L91 中的 rotationBy 改成 rotationTo

如果给视图动画(view.aimate().rotate...)传入 rotationBy ,连续点击这个图标不知道要飘成什么角度…… 于是这个库原本用计时器,禁止用户在一定时间内连续点击列表项,实际上是不妥的,应当裁剪优化此处逻辑。

实际上,我第一次找来 TreeViewAdapter 是为了实现 PDF 阅读器的目录界面:

操作PDF是通过PDFium这个库,此库暂时不支持修改书签,所以当时没有过多深入地定制 TreeViewAdapter 。

现需用 TreeViewAdapter 实现浏览器的主页导航,显然,需要用到右滑删除、长按、拖拽排序这些 RecyclerView 的看家本领,这就需要一番大大的拓展了。

现在效果如下:

拖拽时,自动将展开的节点折叠,不然会出现问题。

至于别后的数据格式,我决定用 Json,格式与Chrome浏览器或者说Edge浏览器一致。

格式很明显,是通过在父节点中容纳子节点列表(children),反复嵌套实现的,分析起来用一个递归很简单。

Json 库用 fastJson,四五兆的文件跑起来也很快,几乎没有察觉:

调试模式冷启动下,第一次打开列表的速度也很快。

差点忘了提,还有很快很方便的过滤搜索功能:

搜索框的光标原本一闪一闪的,感觉很令人分心,于是干脆禁用闪烁,方法是拦截 view.postDelayed,当运行类为...Blink 时,略过不调用。

相关文章

网友评论

      本文标题:继续开发安卓浏览器之二:主页书签导航

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