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


相关文章
|
6天前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2天前
|
安全 数据处理 Android开发
构建高效Android应用:Kotlin协程的实践之路
【4月更文挑战第26天】 在面对现代Android开发时,性能优化和流畅的用户体验成为了开发者们追求的目标。Kotlin作为一种现代化的编程语言,通过其协程特性为Android应用带来了前所未有的并发处理能力。本文将深入探讨如何利用Kotlin协程提升Android应用的响应性和效率,同时保持代码的简洁性。我们将从协程的基础概念出发,逐步揭示如何在实际应用中运用这些强大的工具,以及它们如何改善应用架构和用户交互体验。
|
3天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
4天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
4天前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第24天】随着移动开发技术的不断演进,提升应用性能和用户体验已成为开发者的核心任务。在Android平台上,Kotlin语言凭借其简洁性和功能性成为主流选择之一。特别是Kotlin的协程功能,它为异步编程提供了一种轻量级的解决方案,使得处理并发任务更加高效和简洁。本文将深入探讨Kotlin协程在Android开发中的应用,通过实际案例分析协程如何优化应用性能,以及如何在项目中实现协程。
|
5天前
|
Android开发
Android构建系统:Android.mk(2)函数详解
Android构建系统:Android.mk(2)函数详解
12 1
|
5天前
|
Android开发
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
3 0
|
10天前
|
缓存 移动开发 Android开发
构建高效Android应用:从优化用户体验到提升性能表现
【4月更文挑战第18天】 在移动开发的世界中,打造一个既快速又流畅的Android应用并非易事。本文深入探讨了如何通过一系列创新的技术策略来提升应用性能和用户体验。我们将从用户界面(UI)设计的简约性原则出发,探索响应式布局和Material Design的实践,再深入剖析后台任务处理、内存管理和电池寿命优化的技巧。此外,文中还将讨论最新的Android Jetpack组件如何帮助开发者更高效地构建高质量的应用。此内容不仅适合经验丰富的开发者深化理解,也适合初学者构建起对Android高效开发的基础认识。
|
10天前
|
移动开发 Android开发 开发者
构建高效Android应用:采用Kotlin进行内存优化的策略
【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
|
12天前
|
缓存 移动开发 Java
构建高效的Android应用:内存优化策略
【4月更文挑战第16天】 在移动开发领域,尤其是针对资源有限的Android设备,内存优化是提升应用性能和用户体验的关键因素。本文将深入探讨Android应用的内存管理机制,分析常见的内存泄漏问题,并提出一系列实用的内存优化技巧。通过这些策略的实施,开发者可以显著减少应用的内存占用,避免不必要的后台服务,以及提高垃圾回收效率,从而延长设备的电池寿命并确保应用的流畅运行。