美文网首页
可配置菜单栏

可配置菜单栏

作者: y0000c | 来源:发表于2019-11-23 23:59 被阅读0次

写在前面

你的【ID】呢 这篇文章中,提到了【通过xml模板,动态生成菜单】。这里我们将介绍如果通过配置文件,动态生成菜单。配置文件的格式根据实际情况来决定,我们公司项目使用的xml配置文件。

一、背景

针对不同的用户,软件提供给用户的功能是有差异的,有些功能比较丰富,有些则比较单一。因此,为了避免直接修改代码,我们公司是通过修改xml配置文件来实现的。

二、简单三部曲

1、编写json配置文件

<?xml version="1.0" encoding="utf-8"?>
<menu>
    <item>
        <title>加法</title>
        <command>cmd_add</command>
    </item>
    <item>
        <title>减法</title>
        <command>cmd_sub</command>
    </item>
    <item>
        <title>乘法</title>
        <command>cmd_mul</command>
    </item>
    <item>
        <title>除法</title>
        <command>cmd_div</command>
    </item>
</menu>

<title>是菜单的名称,是显示在界面的按钮名称
<command>是实际菜单的命令,是每个命令的唯一识别id
我们这里的命令是通过工厂模式来实现,这边暂时不描述。
title可能会根据不同的版本,略有不同,因此是不适合作为命令唯一id的

2、解析json数据为实体类

xml的解析方式主要有三种,SAX,DOM,PULL。暂时不在这里具体描述。

// 存储xml解析后的数据,并用该类来封装
public class MenuItem
{
    private String title;
    private String cmd;
    ...此处省略get,set,构造函数
}

3、实体类映射到界面

通过解析menu.xml文件,我们就会得到List<MenuItem> menuList 这么一个集合。只要拿到了这么一个数据集合,想要把数据渲染到界面上就轻而易举了。
比如:
(1)通过ListView,GridView,RecyclerView等渲染
(2)通过动态添加Button,TextView的方式来渲染
(3)当每个按钮(指每个列表的Item,或者是Button)点击时,通过其绑定的MenuItem数据,获取到menuItem.getCmd()来拿到实际的运行命令id,就能真正执行对应的命令功能了。

三、扩展分析

1、xml里面可以配置的不仅仅只有各种字符串,还可以配置图片资源等
2、配置文件,不仅可以保存在本地的xml文件中,还可以是从服务器请求中返回(针对不同的用户,可以做到定制化)
3、配置文件的格式多种多样,移动端最常用的应该是json格式

如有任何不对的地方,欢迎指正。
如有更多扩展分析,欢迎交流。

相关文章

网友评论

      本文标题:可配置菜单栏

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