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


相关文章
|
17天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
18天前
|
数据库 Android开发 开发者
构建高效Android应用:Kotlin协程的实践指南
【4月更文挑战第2天】随着移动应用开发的不断进步,开发者们寻求更流畅、高效的用户体验。在Android平台上,Kotlin语言凭借其简洁性和功能性赢得了开发社区的广泛支持。特别是Kotlin协程,作为一种轻量级的并发处理方案,使得异步编程变得更加简单和直观。本文将深入探讨Kotlin协程的核心概念、使用场景以及如何将其应用于Android开发中,以提高应用性能和响应能力。通过实际案例分析,我们将展示协程如何简化复杂任务,优化资源管理,并为最终用户提供更加流畅的体验。
|
2天前
|
缓存 移动开发 Android开发
构建高效Android应用:从优化用户体验到提升性能表现
【4月更文挑战第18天】 在移动开发的世界中,打造一个既快速又流畅的Android应用并非易事。本文深入探讨了如何通过一系列创新的技术策略来提升应用性能和用户体验。我们将从用户界面(UI)设计的简约性原则出发,探索响应式布局和Material Design的实践,再深入剖析后台任务处理、内存管理和电池寿命优化的技巧。此外,文中还将讨论最新的Android Jetpack组件如何帮助开发者更高效地构建高质量的应用。此内容不仅适合经验丰富的开发者深化理解,也适合初学者构建起对Android高效开发的基础认识。
2 0
|
2天前
|
移动开发 Android开发 开发者
构建高效Android应用:采用Kotlin进行内存优化的策略
【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
5 0
|
4天前
|
缓存 移动开发 Java
构建高效的Android应用:内存优化策略
【4月更文挑战第16天】 在移动开发领域,尤其是针对资源有限的Android设备,内存优化是提升应用性能和用户体验的关键因素。本文将深入探讨Android应用的内存管理机制,分析常见的内存泄漏问题,并提出一系列实用的内存优化技巧。通过这些策略的实施,开发者可以显著减少应用的内存占用,避免不必要的后台服务,以及提高垃圾回收效率,从而延长设备的电池寿命并确保应用的流畅运行。
|
8天前
|
存储 数据库 Android开发
构建高效安卓应用:采用Jetpack架构组件优化用户体验
【4月更文挑战第12天】 在当今快速发展的数字时代,Android 应用程序的流畅性与响应速度对用户满意度至关重要。为提高应用性能并降低维护成本,开发者需寻求先进的技术解决方案。本文将探讨如何利用 Android Jetpack 中的架构组件 — 如 LiveData、ViewModel 和 Room — 来构建高质量的安卓应用。通过具体实施案例分析,我们将展示这些组件如何协同工作以实现数据持久化、界面与逻辑分离,以及确保数据的即时更新,从而优化用户体验并提升应用的可维护性和可测试性。
|
10天前
|
XML 移动开发 Android开发
构建高效安卓应用:采用Jetpack Compose实现动态UI
【4月更文挑战第10天】 在现代移动开发中,用户界面的流畅性和响应性对于应用的成功至关重要。随着技术的不断进步,安卓开发者寻求更加高效和简洁的方式来构建动态且吸引人的UI。本文将深入探讨Jetpack Compose这一革新性技术,它通过声明式编程模型简化了UI构建过程,并提升了性能与跨平台开发的可行性。我们将从基本概念出发,逐步解析如何利用Jetpack Compose来创建具有数据动态绑定能力的安卓应用,同时确保应用的高性能和良好用户体验。
14 0
|
12天前
|
监控 API Android开发
构建高效安卓应用:探究Android 12中的新特性与性能优化
【4月更文挑战第8天】 在本文中,我们将深入探讨Android 12版本引入的几项关键技术及其对安卓应用性能提升的影响。不同于通常的功能介绍,我们专注于实际应用场景下的性能调优实践,以及开发者如何利用这些新特性来提高应用的响应速度和用户体验。文章将通过分析内存管理、应用启动时间、以及新的API等方面,为读者提供具体的技术实现路径和代码示例。
|
13天前
|
移动开发 API Android开发
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第7天】 在移动开发领域,性能优化和应用响应性的提升一直是开发者追求的目标。近年来,Kotlin语言因其简洁性和功能性在Android社区中受到青睐,特别是其对协程(Coroutines)的支持,为编写异步代码和处理并发任务提供了一种更加优雅的解决方案。本文将探讨Kotlin协程在Android开发中的应用,揭示其在提高应用性能和简化代码结构方面的潜在优势,并展示如何在实际项目中实现和优化协程。
|
13天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。