Android重构与设计之路,从整理提示对话框弹窗开始

  封装一个独立弹窗Module,这里的弹窗包括普通的Dialog方式弹框和WindowManager方式弹窗。提供一种管理项目里面弹窗的方案,便于后期修改和维护。

  首先描述一个在大项目中普遍存在的一个现象:由于项目的功能多,负责功能的人不同,当功能中需要一个普通的确定取消对话框时,大部分人都选择自己写了一个,自己new一个独立的弹窗出来。这样做的好处有以下几个:

  1. 代码逻辑独立,自己写的代码自己能控制
  2. 快速方便,便于修改,便于满足各种奇怪的需求

  可是这个做法导致项目中存在大量的代码冗余,大量的分散的弹窗,短期内一般也不会有什么问题,如果这个时候项目要重构,要修改所有弹窗的样式,接下来面临几个问题:

  1. 不知道有多少个弹窗
  2. 不知道代码中什么地方会有弹窗
  3. 不知道弹窗写法都有哪些(样式不知道,弹出的方式是Dialog还是WindowManager)
  4. 改动点多,工作量大,风险大

  本文就是针存在以上弹窗特点的项目,提供一种对话框的管理方式,提供一种比较好维护的实现方式(不一定是最好的实现方式)。由于代码量大,本文只讲实现设计思想和实现方式,具体源码可以直接从github下载查看,后面会提供地址。

本文实现弹窗效果动画演示

  本文中Dialog弹窗样式总共实现了12种,但是这个不能作为一个标准,要根据自己项目的实际情况,自己做分类,当然大部分简单的项目用本文提供的Module就可以直接使用。

常见弹窗的实现方式

常见弹窗的实现方式分析

  这种实现方式一般是项目刚开始的时候,写弹窗的人一般都会这样设计,本身没什么问题,如果弹窗样式少并且弹窗布局都比较规范还是可以维护的。但是实际上这两个条件在大项目中一般都不满足的,首先弹窗样式肯定不少,其实为了满足产品各种需求,弹窗布局也会不同。现象一下,就一个对话框弹窗布局里面要容纳所的弹窗样式,也就是一个CommonDialog包含了所有的弹窗逻辑,这本身就维护了单一性原则。而且越往后越难维护,所有人都改同一个类,同一个布局,第一次经手的人估计是有点难以下手修改的。为了解决这种现象,可以用下面的方式来代替。

易维护易拓展的对话框弹窗实现方式

  WindowManager方式弹窗的设计思想与Dialog弹窗方式一样的,只是底层用来显示View的地方不一样,本文不具体讲,源码部分是包含的。

易维护易拓展的对话框弹窗实现方式分析

  对于上面的实现方式有如下几个好处

  1. 通过工厂模式,外部传入一个Type参数,使用者不需要关系实现细节,只需要知道Type对应的布局样式

  2. 每种Type对应一种弹窗布局,只需要实现自己关系的接口

  3. 各种弹窗逻辑完全独立,独立修改,独立维护

  使用者需要关注Type类型和需要调用对应Type弹窗的什么方法,这里的Type类型必须要让使用者知道它对应什么样的样式,这个比较难,代码里面只能通过注释的方式来说明了,如果比较正统化的公司可能会有文档记录。不过这里也不会造成多大的困扰,使用者随很容易就测试出是不是自己要的样式,所以使用者还是能很方便的进行使用的。

易维护易拓展的部分对话框弹窗展示

 

 

 

 

 

易维护易拓展的对话框弹窗源码实现

  实现这种弹窗,需要定义好Type类型,要根据自己项目的实际情况对Type类型进行合理的分类

  弹窗效果实现了各种不同造型的圆角,以及按钮支持了水波纹

  源码下载地址:https://github.com/PopFisher/SmartAlertPop

总结

  本项目只是提供一种基本的框架,具体的对话框样式可以根据自身项目的需求而改变,可以随意添加删除修改一种类型,主要是为了统一管理项目中的弹窗,方便维护与管理。

时间: 2024-12-24 22:40:19

Android重构与设计之路,从整理提示对话框弹窗开始的相关文章

Android软硬整合设计与框架揭秘: HAL&Framework &Native Service &App&HTML5架构设计与实战开发

掌握Android从底层开发到框架整合技术到上层App开发及HTML5的全部技术: 一次彻底的Android架构.思想和实战技术的洗礼: 彻底掌握Andorid HAL.Android Runtime.Android Framework.Android Native Service.Android Binder.Android App.Android Testing.HTML5技术的源泉和精髓等核心技术,不仅仅是技术和代码本身,更重要的是背后的设计思想和商业哲学. 一.课程特色 l  贯通And

转:Bad Smell重构和设计的标准

Bad Smell重构和设计的标准.——与其无尽的等待完美的设计,不如立刻着手实现可行的设计,然后再在设计出现臭味的时候重构实现! 食品有做得好不好之分.其中一个重要的指标就是保质期.好的食品,保质期就长,坏的食品保质期就短.对于代码来说也一样.也有一个保质能力的问题.好的代码,入口芬芳.坏的代码早早就变质了,而且随着时间的推移越来越臭,直到最后,我们只好把它扔掉,虽然它也曾经是我们花钱买来的…… 比如说,我们接到一个项目,我们经过思考,获得了一个可行的设计方案,然后着手实现.此时,可能有一个小

Android通用框架设计与完整电商APP开发

第1章 课程介绍及APP效果展示(Java版)本章概述了本课程大家能学到什么,老师如何讲解,为什么这么讲解,并介绍了框架的整体架构设计与模块分解,最后展示了用自己设计的框架开发出来的完整电商APP的效果图(服务端API快速搭建教程:http://www.imooc.com/article/19001) ...1-1 课程导学1-2 项目架构设计与模块分解 第2章 项目初始化本章将从零搭建一个空项目,实践项目搭建的过程,并额外教大家搭建一个基于Go语言的Web版Git服务器,实现代码托管的自举.(

Android App的设计架构:MVC,MVP,MVVM与架构经验谈

来源: Android App的设计架构:MVC,MVP,MVVM与架构经验谈 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于App的架构如何设计: 我的App需要应用这些设计架构吗? MVC,MVP等架构讲的是什么?区别是什么? 本文就来带你分析一下这几个架构的特性,优缺点,以及App架构设计中应该注意的问题. 1.架构设计的目的 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员

<从编程到(架构)设计之路>的翻转式系列课程

<从编程到(架构)设计之路>的翻转式系列课程 课程(1):  从接口(Interface)出发:接口设计的技术和艺术 一個成功案例的實務傳承 高焕堂37年码农经验讲解 指导教练:高焕堂 1. 简介翻转式课堂 1.1  翻转式课堂的目标 萨尔曼·可汗 說:未来的世界是不确定的,因此重要的不是学到什么,而是学习新知识的能力.教育应该具有实践性,其目的应该是帮助学生掌握技能.取得信息,使他们能够谋生.教育应该具有实践性,其目的应该是帮助学生掌握技能.取得信息,使他们能够谋生.学徒制的基础是主动学习-

Android软硬整合设计与框架揭秘: HAL&amp;Framework &amp;Native Service &amp;App&amp;Browser架构设计与实战开发

在软硬整合领域, Android以其对软件和硬件的高度开放性引领了当今的软硬整合潮流,全世界正在进行一场轰轰烈烈的Android运动,Android以不可思议的速度渗透越来越广的领域,Android智能手机.Android智能电视.Android微波炉.Android平板电脑.Android智能机器人.Android车载系统等越来越多的Android产品涌入人们的工作和生活中,自从Google的[email protected]战略发布以来,更是让世界对Android充满了怦然心动的期待,可以预

Andriod 关于操作栏 ActionBar 的设计原则【转载+整理】

原文地址 本文内容 操作栏目的 基本布局 适应旋转和不同的屏幕尺寸 副操作栏的布局 操作栏按钮 上下文操作栏 操作栏清单 设计原则就是为你在编写 Android APP 时,尤其是如何安排操作按钮的位置,以及顺序等等,能大幅度提供用户体验的,提供的一个指导思想.值得时不时地回忆一下,这些指导原则都是经过长时间实践得到的结论.一个 APP 好不好,在你最开始时,点击一遍所有的菜单和按钮,就清楚了.在使用过大量 Android APP 后,你会发现,遵循了下面这些原则的 APP 将会有更好的用户体验

Android程序员学习之路

和一些刚工作以及未毕业的同学沟通,很多同学对在没有工作机会或熟练Android人员指导的情况下,如何学习Android并提高Android水平比较关心.下面我从几个方面介绍一些方法和方式来和大家分享: 1.Android知识 1.1.网站资源 1.1.1.Android官网 这个是最权威最官方的.主要看设计篇 和开发篇 .API相关接口用到哪一个接口再去看.不用挨个看.当然现在可能会被墙,大家也可以看本地SDK目录下的docs中的index.html打开后的文档. 1.1.2.stackover

[转]Android程序框架设计

这篇文章主要内容来自于之前我讲的一个PPT文档,现在将其整理如下.欢迎指正.以下的内容都是来自于我自身的经验,欢迎大家多提自己的建议. 1.一些概念 模式的定义: 每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心.通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作. 什么是设计模式? 设计模式是在某种特别的情况下,针对某种问题的某种典型.通用的解决方法. 我们是需要适当了解并学习一些设计模式,在程序开发过程中,总是会涉及到一些框架设计,模块