结合前两篇,Android数据库存储模块封装,让操作记录更好用可复用
Android的配置文件操作封装,摒弃SharedPreference操作配置漫天乱飞,
至此已经有了数据存储模块和操作配置管理模块。
这里介绍下A711的小屏管理框架实现,让设计出来的小屏界面菜单更简单,更好用。
看过原来A711上的小屏菜单代码,感觉有点儿复杂,不好用。要想用除非得把代码仔细分析一下,看懂才可以。
但是,如果连增加修改一个菜单都要花精力看透代码的话,哪还有精力去搞业务。
菜单这部分操作应该有一简单框架来负责,让增加菜单和改界面变得套用模板即可。
有多简单?有多好用?
先看下最终的实现效果:
//主菜单 //====================================================== String[] Index_Menu = { "终端管理", "公交应用", "银联应用", "其他应用1", "其他应用2", "其他应用3", "" }; //一级子菜单 //======================================================= String[] Index_Inc_Pos={ "终端查询", "终端设置", "红外应用", "" }; //二级子菜单 //========================================================= String[] Index_Inc_PosSet ={ "系统参数设置", "线路票价设置", "终端时间设置", "终端音量设置", "" }; String[] Index_Inc_PosGet ={ "终端版本查询", "参数版本查询", "" }; String[] Index_Inc_Bus ={ "公交未传记录", "公交名单查询", "公交当班汇总", "公交记录汇总", "公交明细查询", "公交清除密钥", "" }; /* ************************************************************************************************************** * 需要分级显示的在此定义 ************************************************************************************************************** */ public _MenuDisplay[] MenuDisTab = { new _MenuDisplay("进入菜单", Index_Menu), new _MenuDisplay("终端管理", Index_Inc_Pos), new _MenuDisplay("终端查询", Index_Inc_PosGet), new _MenuDisplay("", new String[]{""}) }; /* ************************************************************************************************************** * 需要支持执行的在此定义 ************************************************************************************************************** */ //菜单执行表 public _MenuFind[] MenuExeTab = { new _MenuFind("终端版本查询",new GetTermInfoVer()), new _MenuFind("参数版本查询",new GetSysInfoVer()), new _MenuFind("", new Function(){ @Override public void exeFun() { //故意留空,作為結束 } }) };
看到了吧,增加修改菜单,只需要增加修改字符串就够啦!且支持无限菜单分级。
从这里的定义基本就能看出,菜单的查找都是根据比对字符串而已,因此,原理很简单,实现和使用也就很简单了。
最终把汉字菜单映射到方法的处理中。
最终菜单所要执行的功能在哪?
只需实现这个即可。举例:
//菜单执行表 public _MenuFind[] MenuExeTab = { new _MenuFind("终端版本查询",new GetTermInfoVer()), new _MenuFind("参数版本查询",new GetSysInfoVer()), new _MenuFind("查未上传记录",new GetUnSendRecNum()), new _MenuFind("最近一笔交易",new GetLastRecord()), new _MenuFind("最近十笔交易",new GetLast10Record()), //在这里添加 new _MenuFind("", new Function(){ @Override public void exeFun() { //故意留空,作為結束 } }) };
//================================================================================= class GetTermInfoVer implements Function { public void exeFun(){ auxActivity.refreshTopScreen(); auxActivity.refreshCenterScreen(); auxActivity.titleTop("终端版本信息"); //auxScreen.textOut(30, 130, "查询成功"); } } class GetSysInfoVer implements Function { public void exeFun(){ auxActivity.refreshTopScreen(); auxActivity.refreshCenterScreen(); auxActivity.titleTop("参数版本信息"); //TODO //完成需要的操作 } }
以下为具体实现:
package com.example.yang.testmvvm.auxscreen; import android.graphics.Color; import com.example.yang.testmvvm.utils.DateUtils; import com.newcapec.jni.AuxScreen; //==============>>菜单任务处理 /** * 菜單框架類 * created by yangyongzhen 20180810 * QQ:534117529 */ public class MenuProc { private AuxScreen auxScreen; public final int MenuMaxGrade = 4; //菜单显示的最多级数 public final int MenuMaxNumber = 50; //所有菜单的数量 public final int MenuMaxDisNum = 15; //一页里的能显示的最大菜单行数,目前此值固定 interface Function{ void exeFun(); } //菜单执行 class _MenuFind { String pDis; Function function; public _MenuFind(String pDis,Function pFunction) { this.pDis = pDis; this.function = pFunction; } } //菜单显示 class _MenuDisplay { String pDisDir; String[] pDisFile; public _MenuDisplay(String pDisDir, String[] pDisFile) { this.pDisDir = pDisDir; this.pDisFile = pDisFile; } } //菜单处理 class __MenuProc { public int GradeCout; //菜单等级计数 String[] DisBuf; //菜单显示当前缓冲区 int[][] DisCount; //菜单级计算 String[] MemoryDisBuf; //菜单暂存缓冲区 public __MenuProc() { GradeCout = 1; DisCount = new int[MenuMaxGrade][2]; DisBuf = new String[MenuMaxGrade+1]; MemoryDisBuf = new String[MenuMaxDisNum+1]; } } public __MenuProc menuData; //菜单处理定义 public MenuProc(AuxScreen aux) { auxScreen = aux; menuData = new __MenuProc(); } //主菜单 //====================================================== String[] Index_Menu = { "终端管理", "公交应用", "银联应用", "其他应用1", "其他应用2", "其他应用3", "" }; //一级子菜单 //======================================================= String[] Index_Inc_Pos={ "终端查询", "终端设置", "红外应用", "" }; //二级子菜单 //========================================================= String[] Index_Inc_PosSet ={ "系统参数设置", "线路票价设置", "终端时间设置", "终端音量设置", "" }; String[] Index_Inc_PosGet ={ "终端版本查询", "参数版本查询", "" }; String[] Index_Inc_Bus ={ "公交未传记录", "公交名单查询", "公交当班汇总", "公交记录汇总", "公交明细查询", "公交清除密钥", "" }; /* ************************************************************************************************************** * 需要分级显示的在此定义 ************************************************************************************************************** */ public _MenuDisplay[] MenuDisTab = { new _MenuDisplay("进入菜单", Index_Menu), new _MenuDisplay("终端管理", Index_Inc_Pos), new _MenuDisplay("终端查询", Index_Inc_PosGet), new _MenuDisplay("", new String[]{""}) }; /* ************************************************************************************************************** * 需要支持执行的在此定义 ************************************************************************************************************** */ //菜单执行表 public _MenuFind[] MenuExeTab = { new _MenuFind("终端版本查询",new GetTermInfoVer()), new _MenuFind("参数版本查询",new GetSysInfoVer()), new _MenuFind("", new Function(){ @Override public void exeFun() { //故意留空,作為結束 } }) }; //刷新中间区域屏幕 public void refreshCenterScreen() { auxScreen.setBgcolor(Color.parseColor("#F2F2F2")); auxScreen.clrLine(70, 100); auxScreen.setBgcolor(Color.parseColor("#F2F2F2")); auxScreen.clrLine(100, 150); auxScreen.setBgcolor(Color.parseColor("#F2F2F2")); auxScreen.clrLine(150, 200); auxScreen.setBgcolor(Color.parseColor("#F2F2F2")); auxScreen.clrLine(200, 250); auxScreen.setBgcolor(Color.parseColor("#F2F2F2")); auxScreen.clrLine(250, 300); auxScreen.setBgcolor(Color.parseColor("#F2F2F2")); auxScreen.clrLine(300, 319); } //刷新头部区域 public void refreshTopScreen() { auxScreen.setBgcolor(Color.parseColor("#FFFFFF")); auxScreen.clrLine(0, 50); auxScreen.setBgcolor(Color.parseColor("#FFFFFF")); auxScreen.clrLine(50, 70); } //头部标题 public void titleTop(String title) { auxScreen.setBgcolor(Color.parseColor("#FFFFFF")); auxScreen.setFontSize(25); auxScreen.setFgcolor(Color.parseColor("#000000")); auxScreen.textOut(22, 25, title); refreshTime(); } //刷新日期 public void refreshTime() { auxScreen.setFontSize(22); auxScreen.setFgcolor(Color.parseColor("#000000")); auxScreen.textOut(300, 25, DateUtils.getDate4()); } //================================================================================= class GetTermInfoVer implements Function { public void exeFun(){ refreshTopScreen(); refreshCenterScreen(); titleTop("交易信息汇总"); auxScreen.textOut(30, 130, "查询成功"); } } class GetSysInfoVer implements Function { public void exeFun(){ } } }