写在前面
在 你的【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格式
如有任何不对的地方,欢迎指正。
如有更多扩展分析,欢迎交流。