重新构建711的Android项目(一),巧妙的小屏菜单查询框架实现
时间:2022-07-22
本文章向大家介绍重新构建711的Android项目(一),巧妙的小屏菜单查询框架实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
结合前两篇,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(){
}
}
}
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- tf.train.shuffle_batch函数解析
- 网页小图标Favicon
- ASP.net Core MVC项目给js文件添加版本号
- 多目标优化非支配关系实现
- linux之shell
- linux下的定时任务处理
- 10 个用纯 Javascript 实现的好用插件
- Tensorflow ActiveFunction激活函数解析
- C++核心准则Con.1:默认情况下使对象不可修改
- 进化算法个体和指标的一致性
- matlab代码折叠与分节注释
- Flask从零到一 1 | 虚拟环境和第一个flask程序
- 按照元素指定条件筛选结构体数组
- 多目标优化按支配关系分层实现
- CentOS 7 解决丢失 nginx.pid