重新构建711的Android项目(一),巧妙的小屏菜单查询框架实现

简介: 重新构建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(){
        }
    }
}


相关文章
|
2月前
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
15天前
|
Java Android开发 开发者
探索安卓开发:构建你的第一个“Hello World”应用
在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
24 0
|
1月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
53 6
|
1月前
|
算法 JavaScript Android开发
|
25天前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
2月前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
77 5
|
2月前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
127 1
|
2月前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
51 2
|
2月前
|
开发工具 Android开发 iOS开发
Android vs iOS:构建移动应用时的关键考量####
本文深入探讨了Android与iOS两大移动平台在开发环境、性能优化、用户体验设计及市场策略方面的差异性,旨在为开发者提供决策依据。通过对比分析,揭示两个平台各自的优势与挑战,帮助开发者根据项目需求做出更明智的选择。 ####
|
14天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
40 19