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


相关文章
|
22小时前
|
移动开发 数据处理 Android开发
构建高效Android应用:Kotlin的协程与Flow的使用
【5月更文挑战第23天】 在移动开发领域,性能优化和异步编程一直是核心议题。随着Kotlin语言在Android开发中的普及,其提供的协程(coroutines)和流式编程(Flow)功能为开发者带来了革命性的工具,以更简洁、高效的方式处理异步任务和数据流。本文将深入探讨Kotlin协程和Flow在Android应用中的实际应用,以及它们如何帮助开发者编写更加响应迅速且不阻塞用户界面的应用程序。我们将通过具体案例分析这两种技术的优势,并展示如何在现有项目中实现这些功能。
|
1天前
|
人工智能 搜索推荐 Android开发
构建高效安卓用户界面的实用指南
【5月更文挑战第22天】构建高效安卓用户界面的指南,包括遵循一致性、简洁性和可访问性原则,合理布局,优化图标和图片,利用动画效果,提供个性化设置以及优化性能。随着技术发展,开发者应学习新技能,如AI,以适应用户需求变化,创造更智能、个性化的应用。
13 0
|
1天前
|
缓存 Java Android开发
构建高效安卓应用:内存优化策略详解
【5月更文挑战第22天】在构建高性能的安卓应用中,内存管理是至关重要的方面。不恰当的内存使用不仅会导致应用运行缓慢,还可能引发系统崩溃和其他稳定性问题。本文将深入探讨针对安卓平台的内存优化技巧,包括避免内存泄漏、合理使用数据结构和缓存策略,以及利用安卓特有的内存管理工具。我们将通过实际案例分析,展示如何诊断内存问题,并采取有效措施以提升应用性能和用户体验。
|
1天前
|
安全 数据库 Android开发
构建高效Android应用:采用Kotlin与Jetpack的实践指南
【5月更文挑战第22天】 在移动开发领域,Android系统因其开放性和广泛的用户基础而备受开发者青睐。随着技术的不断演进,Kotlin语言以其简洁性和功能性成为Android开发的首选语言。本文将深入探讨如何结合Kotlin和Android Jetpack组件来构建一个高效且易于维护的Android应用。我们将重点讨论如何使用Jetpack的核心组件,如LiveData、ViewModel和Room,以及Kotlin的语言特性来优化代码结构,提高应用性能,并简化数据管理。通过具体案例分析,本文旨在为开发者提供一套实用的技术指导,帮助他们在竞争激烈的市场中脱颖而出。
|
1天前
|
移动开发 监控 Android开发
构建高效Android应用:从内存优化到电池续航
【5月更文挑战第22天】 在移动开发的世界中,一个流畅且高效的Android应用是区分优秀与平庸的关键因素。本文深入探讨了如何通过内存管理和电池使用效率的优化来提升应用性能,确保最终用户获得无缝且持久的体验。我们将透过具体策略和编码实践,揭示开发过程中可实施的改进措施,旨在帮助开发者克服常见的性能瓶颈,打造更高质量的Android应用。
|
1天前
|
移动开发 数据库 Android开发
构建高效Android应用:探究Kotlin的协程优势
【5月更文挑战第22天】随着移动开发技术的不断进步,Android平台的性能优化已经成为开发者关注的焦点。在众多提升应用性能的手段中,Kotlin语言提供的协程概念因其轻量级线程管理和异步编程能力而受到广泛关注。本文将深入探讨Kotlin协程在Android开发中的应用,以及它如何帮助开发者构建出更高效、响应更快的应用,同时保持代码的简洁性和可读性。
|
2天前
|
缓存 Java Linux
构建高效安卓应用:内存优化策略详解
【5月更文挑战第21天】在移动开发领域,应用性能的优化一直是开发者关注的焦点。尤其是对于安卓平台而言,由于设备的硬件配置多样化,内存管理成为提升应用性能的关键因素之一。本文将深入探讨针对安卓平台的内存优化技巧,从内存分配原理出发,详细分析内存泄漏的识别与防治,以及如何通过合理的内存使用模式和工具辅助来提升应用的运行效率。
|
2天前
|
移动开发 Java Android开发
构建高效的Android应用:内存优化策略解析
【5月更文挑战第21天】在移动开发领域,尤其是面向资源受限的Android设备,内存管理与优化是提升应用性能和用户体验的关键因素。本文深入探讨了Android内存优化的多个方面,包括内存泄漏的预防、合理的内存分配策略、以及有效的内存回收机制。通过分析内存管理的原理和提供实用的编码实践,开发者可以显著减少其应用的内存占用,从而避免常见的性能瓶颈和应用程序崩溃问题。
|
2天前
|
移动开发 安全 Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【5月更文挑战第21天】 在移动开发领域,尤其是针对Android平台,网络请求的处理一直是影响应用性能和用户体验的关键因素。随着现代应用对实时性和响应速度要求的不断提高,传统的同步阻塞或异步回调模式已不再满足开发者的需求。本文将探讨利用Kotlin协程来简化Android应用中的网络请求处理,实现非阻塞的并发操作,并提升应用的整体性能和稳定性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android项目中集成和优化网络请求流程。
|
2天前
|
移动开发 Android开发 开发者
构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第21天】在移动开发领域,性能优化和流畅的用户体验是至关重要的。随着Kotlin语言在Android平台的广泛采纳,其并发处理的强大工具—协程(Coroutines),已成为提升应用响应性和效率的关键因素。本文将深入分析Kotlin协程的核心原理,探讨其在Android开发中的优势,并通过实例演示如何有效利用协程来优化应用性能,打造更加流畅的用户体验。
12 4