【Android组件】封装加载弹框
📖封装加载弹框
- ✅1. 构造LoadingDialog
- ✅2. 调用LoadingDialog
效果:

✅1. 构造LoadingDialog
构造LoadingDialog类涉及到设计模式中的建造者模式,进行链式调用,注重的是构建的过程,设置需要的属性。
步骤一:在utils包下创建LoadingDialog
import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;public class LoadingDialog extends Dialog {public LoadingDialog(Context context, int themeResId) {super(context, themeResId);}public static class Builder {private Context context;//上下文private String message;//提示信息private boolean isShowMessage = true;//是否显示提示信息private boolean isCancelable = false;//返回键是否可以取消private boolean isCancelOutside = false;//点击外部是否可以取消//构造方法传入上下文public Builder(Context context) {this.context = context;}//设置提示信息public Builder setMessage(String message) {this.message = message;return this;}//设置是否显示提示信息public Builder setShowMessage(boolean isShowMessage) {this.isShowMessage = isShowMessage;return this;}//设置是否可以按返回键取消public Builder setCancelable(boolean isCancelable) {this.isCancelable = isCancelable;return this;}//设置是否可以取消public Builder setCancelOutside(boolean isCancelOutside) {this.isCancelOutside = isCancelOutside;return this;}//创建LoadingDialog对象public LoadingDialog create() {LayoutInflater inflater = LayoutInflater.from(context);View view = inflater.inflate(R.layout.dialog_loading, null);LoadingDialog loadingDailog = new LoadingDialog(context, R.style.MyProgressDialog);TextView msgText = (TextView) view.findViewById(R.id.messageTextView);if (isShowMessage) {msgText.setText(message);} else {msgText.setVisibility(View.GONE);}loadingDailog.setContentView(view);loadingDailog.setCancelable(isCancelable);loadingDailog.setCanceledOnTouchOutside(isCancelOutside);return loadingDailog;}}
}
步骤二:在layout文件下添加组件:dialog_loading.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"><!--白色:<color name="white">#ffffffff</color>--><LinearLayoutandroid:layout_width="140dp"android:layout_height="100dp"android:gravity="center"android:orientation="vertical"android:background="@drawable/shape_dialog_redius_gray"><ProgressBarandroid:id="@+id/progressBar"android:layout_width="40dp"android:layout_height="40dp"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:indeterminate="true"android:indeterminateTint="@android:color/white" /><TextViewandroid:id="@+id/messageTextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/progressBar"android:layout_centerHorizontal="true"android:layout_marginTop="16dp"android:textColor="@android:color/white"android:textSize="16sp" /></LinearLayout></RelativeLayout>
步骤三:在drawable文件下添加shape:shape_dialog_redius_gray.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" ><!--黑色半透明:<color name="black_transparent">#98000000</color>--><solid android:color="@color/black_transparent" /><corners android:radius="5dp" />
</shape>
步骤四:在 values 文件下的themes.xml下添加如下主题
<!--弹框加载样式--><!--透明色:<color name="transparent">#00000000</color>--><style name="MyProgressDialog" parent="Theme.AppCompat.Dialog"><item name="android:windowBackground">@android:color/transparent</item><!--背景透明--><item name="android:windowIsFloating">true</item><!--是否浮动--><item name="android:backgroundDimEnabled">false</item><!--对话框背后的内容是否被暗淡--><item name="android:windowContentOverlay">@null</item><!--设置窗口的内容覆盖物--><item name="android:statusBarColor">@null</item><!--状态栏背景色--></style>
✅2. 调用LoadingDialog
在点击事件或者发生http请求时显示弹框,请求结束后关闭显示即可,下面是使用1秒延时来模拟发送请求
private Handler mHandler = new Handler();//全局定义send.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//加载弹窗LoadingDialog loadingDialog = new LoadingDialog.Builder(getActivity()).setMessage("加载中...").setCancelable(true)//返回键是否可关闭.setCancelOutside(false)//点击弹框外是否可关闭.create();//显示loadingDialog.show();//模拟异步发送请求后关闭加载弹窗mHandler.postDelayed(new Runnable() {@Overridepublic void run() {//关闭显示loadingDialog.dismiss();}}, 1000);}});
相关文章:
【Android组件】封装加载弹框
📖封装加载弹框 ✅1. 构造LoadingDialog✅2. 调用LoadingDialog 效果: ✅1. 构造LoadingDialog 构造LoadingDialog类涉及到设计模式中的建造者模式,进行链式调用,注重的是构建的过程,设置需要的属性。 步骤一&#x…...
Spring源码二十:Bean实例化流程三
上一篇Spring源码十九:Bean实例化流程二中,我们主要讨论了单例Bean创建对象的主要方法getSingleton了解到了他的核心流程无非是:通过一个简单工厂的getObject方法来实例化bean,当然spring在实例化前后提供了扩展如:bef…...
前端导出文件时,后端代码出错如何将错误信息返回给前端展示
功能说明:前端导出excel时,后端出现异常,比如sql异常,或者创建excel时出现的异常,希望将这些异常信息返回给前端查看。 框架:vue3 axios Springboot 实现难度分析:前端导出excel,…...
解决Spring Boot应用中的内存优化问题
解决Spring Boot应用中的内存优化问题 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. Spring Boot应用的内存管理 在开发和部署Spring Boot应用时,有效地管理内存是确保应用性能和稳…...
shark云原生-日志体系-filebeat高级配置(适用于生产)-更新中
文章目录 1. filebeat.inputs 静态日志收集器2. filebeat.autodiscover 自动发现2.1. autodiscover 和 inputs2.2. 如何配置生效2.3. Providers 提供者2.4. Providers kubernetes2.5. 配置 templates2.5.1. kubernetes 自动发现事件中的变量字段2.5.2 配置 templates 2.6. 基于…...
响应式设计的双璧:WebKit 支持 CSS Flexbox 和 Grid 布局深度解析
响应式设计的双璧:WebKit 支持 CSS Flexbox 和 Grid 布局深度解析 在现代网页设计中,响应式布局是实现跨设备兼容性的关键。CSS Flexbox 和 Grid 作为 CSS 布局的两大支柱,提供了强大的工具来构建灵活和复杂的用户界面。WebKit,作…...
Linux软件包管理
一、软件包管理 1.什么是软件包 一般在window系统的.exe是软件按转包 2.linux系统下的软件包安装方式 PRM 软件包安装 软件名称.rpmYUM 包管理工具 yum intall 软件名称 -y源码安装 下载源代码---编译---安装 很麻烦,稳定 3.二进制软件包 二进制 4.获取*.rpm…...
如何分辨AI生成的内容?AI生成内容检测工具对比实验
检测人工智能生成的文本对各个领域的组织都提出了挑战,包括学术界和新闻界等。生成式AI与大语言模型根据短描述来进行内容生成的能力,产生了一个问题:这篇文章/内容/作业/图像到底是由人类创作的,还是AI创作的?虽然 LL…...
Clion中怎么切换不同的程序运行
如下图,比如这个文件夹下面有那么多的项目: 那么我想切换不同的项目运行怎么办呢?如果想通过下图的Edit Configurations来设置是不行的: 解决办法: 如下图,选中项目的CMakeLists.txt,右键再点击…...
【C++初阶】C++入门(下)
【C初阶】C入门(下) 🥕个人主页:开敲🍉 🥕所属专栏:C🥭 🌼文章目录🌼 6. 引用 6.1 引用的概念 6.2 引用特性 6.3 常引用 6.4 使用场景 6.5 传值、传引用效率…...
【3】迁移学习模型
【3】迁移学习模型 文章目录 前言一、安装相关模块二、训练代码2.1. 管理预训练模型2.2. 模型训练代码2.3. 可视化结果2.4. 类别函数 总结 前言 主要简述一下训练代码 三叶青图像识别研究简概 一、安装相关模块 #xingyun的笔记本 print(xingyun的笔记本) %pip install d2l %…...
【工具分享】FOFA——网络空间测绘搜索引擎
文章目录 FOFA介绍FOFA语法其他引擎 FOFA介绍 FOFA官网:https://fofa.info/ FOFA(Fingerprinting Organizations with Advanced Tools)是一款网络空间测绘的搜索引擎,它专注于帮助用户收集和分析互联网上的设备和服务信息。FOFA…...
[嵌入式 C 语言] 按位与、或、取反、异或
若协议中如下图所示: 注意: 长度为1,表示1个字节,也就是0xFF,也就是 1111 1111 (这里0xFF只是单纯表示一个数,也可以是其他数,这里需要注意的是1个字节的意思) 一、按位…...
Android --- 运行时Fragment如何获取Activity中的数据,又如何将数据传递到Activity中呢?
1.通过 getActivity() 方法获取 Activity 实例: 在 Fragment 中,可以通过 getActivity() 方法获取当前 Fragment 所依附的 Activity 实例。然后可以调用 Activity 的公共方法或者直接访问 Activity 的字段来获取数据。 // 在 Fragment 中获取 Activity…...
Java后端开发(十三)-- Java8 stream的 orElse(null) 和 orElseGet(null)
orElse(null)表示如果一个都没找到返回null。【orElse()中可以塞默认值。如果找不到就会返回orElse中你自己设置的默认值。】 orElseGet(null)表示如果一个都没找到返回null。【orElseGet()中可以塞默认值。如果找不到就会返回orElseGet中你自己设置的默认值。】 区别就…...
L2 LangGraph_Components
参考自https://www.deeplearning.ai/short-courses/ai-agents-in-langgraph,以下为代码的实现。 这里用LangGraph把L1的ReAct_Agent实现,可以看出用LangGraph流程化了很多。 LangGraph Components import os from dotenv import load_dotenv, find_do…...
09.C2W4.Word Embeddings with Neural Networks
往期文章请点这里 目录 OverviewBasic Word RepresentationsIntegersOne-hot vectors Word EmbeddingsMeaning as vectorsWord embedding vectors Word embedding processWord Embedding MethodsBasic word embedding methodsAdvanced word embedding methods Continuous Bag-…...
硅谷甄选二(登录)
一、登录路由静态组件 src\views\login\index.vue <template><div class"login_container"><!-- Layout 布局 --><el-row><el-col :span"12" :xs"0"></el-col><el-col :span"12" :xs"2…...
scipy库中,不同应用滤波函数的区别,以及FIR滤波器和IIR滤波器的区别
一、在 Python 中,有多种函数可以用于应用 FIR/IIR 滤波器,每个函数的使用场景和特点各不相同。以下是一些常用的 FIR /IIR滤波器应用函数及其区别: from scipy.signal import lfiltery lfilter(fir_coeff, 1.0, x)from scipy.signal impo…...
简谈设计模式之建造者模式
建造者模式是一种创建型设计模式, 旨在将复杂对象的构建过程与其表示分离, 使同样的构建过程可以构建不同的表示. 建造者模式主要用于以下情况: 需要创建的对象非常复杂: 这个对象由多个部分组成, 且这些部分需要一步步地构建不同的表示: 通过相同的构建过程可以生成不同的表示…...
ChatTTS在政务热线场景落地:拟真语音提升市民服务体验真实案例
ChatTTS在政务热线场景落地:拟真语音提升市民服务体验真实案例 1. 项目背景与价值 政务热线是政府与市民沟通的重要桥梁,但传统语音系统存在明显痛点:机械化的语音播报缺乏人情味,长时间等待的提示音让市民感到烦躁,…...
如何用ExplorerPatcher解决Windows 11界面不适问题提升工作效率
如何用ExplorerPatcher解决Windows 11界面不适问题提升工作效率 【免费下载链接】ExplorerPatcher 提升Windows操作系统下的工作环境 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher Windows 11带来的界面变革让许多用户感到操作不便,任…...
建行江门市分行:银发关爱在行动 暖心服务送到家
服务无边界。近日,建行广东江门分行辖内多家网点接连上演暖心一幕,员工们主动跨出柜台,将金融服务送到客户家中、病房前,用一次次“特事特办”的上门服务,化解客户的“燃眉之急”,生动诠释了“以客户为中心…...
Java 核心四大基石:从 Object 源码到包装类陷阱的全维度复盘
让我们从两个常见的实际场景出发,看看开发者会遇到什么困惑。 场景一:如何在程序中获取“当前时间”? 你一定见过这样的界面: 直播画面右上角显示:2026 年 01 月 08 日 15:00:00(实时更新) 这个…...
科研绘图没美术功底?只需这一招
相信很多科研同仁都有过这样的痛点:明明实验数据很漂亮,创新点也足够突出,却因为一张制作粗糙、配色杂乱的插图,让论文的整体质量大打折扣。甚至在一些高水平期刊的审稿过程中,精美的图像往往能给审稿人留下更好的第一…...
终极指南:Fn与云原生生态的完美集成,如何与Istio、Prometheus等工具无缝协作
终极指南:Fn与云原生生态的完美集成,如何与Istio、Prometheus等工具无缝协作 【免费下载链接】fn The container native, cloud agnostic serverless platform. 项目地址: https://gitcode.com/gh_mirrors/fn/fn Fn是一款容器原生的无服务器平台&…...
brpc编译优化:提升二进制执行效率的编译选项
brpc编译优化:提升二进制执行效率的编译选项 【免费下载链接】brpc brpc is an Industrial-grade RPC framework using C Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation et…...
AI 辅助 CAPL 脚本编写实战
专栏:《AI 汽车电子测试实战》第 6 篇 作者:一线汽车电子测试工程师 适合人群:CANoe 测试工程师、想学习 CAPL 的新手、想提升脚本效率的测试人员开篇:CAPL 脚本的痛点 CAPL(Communication Access Programming Languag…...
避坑指南:运行YooAsset 2.3.9官方Demo时,你可能会遇到的Sprite白块和退出报错
避坑指南:YooAsset 2.3.9官方Demo运行时的Sprite白块与退出报错深度解析 当Unity开发者初次接触YooAsset资源管理系统时,官方Demo往往是快速上手的最佳途径。然而在YooAsset 2.3.9版本的示例项目中,不少开发者反馈遇到了两个典型问题&#x…...
黑苹果终极配置指南:使用Hackintool轻松搞定显卡驱动、音频和USB问题
黑苹果终极配置指南:使用Hackintool轻松搞定显卡驱动、音频和USB问题 【免费下载链接】Hackintool The Swiss army knife of vanilla Hackintoshing 项目地址: https://gitcode.com/gh_mirrors/ha/Hackintool 还在为黑苹果配置头疼吗?显卡驱动不工…...
