当前位置: 首页 > news >正文

实战:Android 自定义菊花加载框(带超时自动消失) - 教程

一、前言

在 Android 项目开发中,经常需要用到 加载中菊花(类似 iOS 的 HUD 效果),例如支付请求、接口调用等场景。

二、实现效果


如果只是简单写个 ProgressDialog,可控性不强,也不够美观。

下面我分享一个封装好的 菊花加载框工具类 —— SdkLoadingDialog,支持:

✅ 自定义布局(菊花 + 提示文字)
✅ 半透明黑色圆角背景(类似 iOS HUD)
✅ 超时保护(默认 15 秒后自动消失,避免菊花转不停)
✅ 全局静态调用,简单易用

三、核心工具类:SdkLoadingDialog.java

package com.example.sdk.config;
import android.app.Dialog;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import com.example.sdk.R;
public class SdkLoadingDialog extends Dialog {
private static SdkLoadingDialog instance;
private static Handler handler = new Handler(Looper.getMainLooper());
private static Runnable timeoutRunnable;
private SdkLoadingDialog(Context context, int themeResId) {
super(context, themeResId);
}
/**
* 显示菊花
* @param context Activity
* @param message 提示信息
*/
public static void show(Context context, String message) {
hide(); // 先清理旧实例,避免多次 show
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.dialog_loading, null);
TextView msgText = view.findViewById(R.id.tipTextView);
if (message != null && message.length() > 0) {
msgText.setText(message);
msgText.setVisibility(View.VISIBLE);
} else {
msgText.setVisibility(View.GONE);
}
instance = new SdkLoadingDialog(context, R.style.MyDialogStyle);
instance.setCancelable(false); // 禁止返回键取消
instance.setContentView(view);
instance.show();
// 超时保护:15 秒后强制关闭
timeoutRunnable = SdkLoadingDialog::hide;
handler.postDelayed(timeoutRunnable, 15000);
}
/**
* 隐藏菊花
*/
public static void hide() {
if (instance != null && instance.isShowing()) {
Context ctx = instance.getContext();
if (ctx != null) {
instance.dismiss();
}
}
instance = null;
if (handler != null && timeoutRunnable != null) {
handler.removeCallbacks(timeoutRunnable);
timeoutRunnable = null;
}
}
}

四、自定义布局:res/layout/dialog_loading.xml

五、背景样式:res/drawable/bg_loading_dialog.xml

六、自定义主题:res/values/styles.xml

@android:color/transparent
@null
true
true
false

七、使用方法

在需要显示加载框时调用:

// 显示菊花
SdkLoadingDialog.show(this, "正在处理支付...");
// 成功/失败/取消时关闭菊花
SdkLoadingDialog.hide();

附件:菊花图标

http://www.zskr.cn/news/9777.html

相关文章:

  • 超级恶心的题面 [USACO21OPEN] Portals G
  • 昆仑通态触摸屏保存参数到内部存储器并读取的方法成都控制器开发提供
  • 使用reCAPTCHA提升WordPress网站安全性 - 指南
  • LaTeX入门:10分钟掌握核心用法 - 详解
  • Codeforces 2127 D(图论,组合数学,DFS,分类讨论)
  • 每日报告-关于本学期的计划
  • 若依前后端分离版本二次开发(一 搭建开发环境,新建模块)
  • 每日博客
  • STM32HAL 飞快入门(十九):UART 编程(二)—— 中断方式实现收发及局限分析
  • 详细介绍:uniapp | u-waterfall实现瀑布流商品列表(支持筛选查询)
  • 负载分析和排查六
  • 6月6日证书 - 工信部人才交流中心PostgreSQL中级PGCP高级PGCM认证
  • 【下一款产品】
  • # MySQL索引结构发展历史:从B树到B+树的演进之路
  • 通过ML.Net调用Yolov5的Onnx模型
  • 元宇宙与零售业变革:沉浸式体验重构消费全链路 - 指南
  • c# 反射动态添加Attribute
  • MyBatis-Plus 全方位深度指南:从入门到精通
  • Stm32学习过程笔记
  • 【9.24 直播】集群数据管理实战:时序数据库 IoTDB 数据分区、同步与备份详解
  • 01_进程与线程
  • 第六届医学人工智能国际学术会议(ISAIMS 2025)
  • redis 6.0 多线程
  • docker 常用命令与端口映射
  • linux重启mysql服务,几种常见的方法
  • mysql常用语句,常用的语句整理
  • 2025年9月Java后端招聘市场技术风向标:666份招聘数据深度解读
  • 和汽车相关的国内期刊
  • 服务器总资源监控脚本
  • 一个身体,两个身体