结合前两篇,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(){
}
}
}