自定义Material Design风格ProgressDialog

Android进度提示组件演进:从ProgressDialog到现代方案 在Android开发中,进度提示是提升用户体验的重要组件。传统ProgressDialog通过模态对话框实现进度展示,但存在UI阻塞和生命周期管理问题。现代方案如ProgressBar和DialogFragment采用非阻塞式设计,遵循Material Design规范,支持灵活定制和生命周期感知。结合SwipeRefreshLayout可实现下拉刷新,而顶部进度条则适合WebView等场景。对于耗时任务,推荐使用带取消按钮的对话框或前台服务通知。开发者需注意内存泄漏防护和配置变更处理,并遵循8dp栅格系统 阅读详情

1、前言

在安卓开发中,有时候我们需要自定义进度条对话框ProgressDialog来满足设计的需求。本来主要讲解如何来快速实现一个自定义进度条并且修改进度条颜色。

先看下最终效果 :

 

2、代码编写

2.1 布局文件

以下是自定义对话框的布局,实际开发中我们可以根据需求进行个性化布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="100dp"
              android:layout_height="100dp"
              android:layout_gravity="center_horizontal"
              android:background="@drawable/shape_dialog_bg"
              android:layout_centerInParent="true"
              android:orientation="vertical">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">
        <ProgressBar
            android:id="@+id/pb_load"
            android:layout_width="65dp"
            android:layout_height="65dp"
            android:layout_centerInParent="true"/>
    </RelativeLayout>
    <TextView
        android:id="@+id/tv_load_dialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/loading"
        android:textColor="#9a9b98"
        android:textSize="12sp"/>
</LinearLayout>

shape代码:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <corners android:radius="8dp" />
    <solid android:color="#88000000" />
</shape>

2.2 自定义ProgressDialog

直接贴代码,代码如下:


/**
 * 加载提醒对话框
 */
public class CustomDialog extends ProgressDialog
{
    public CustomDialog(Context context)
    {
        super(context);
    }

    public CustomDialog(Context context, int theme)
    {
        super(context, theme);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        init(getContext());
    }
    private void init(Context context)
    {
        //设置不可取消,点击其他区域不能取消,实际中可以抽出去封装供外包设置
        setCancelable(false);
        setCanceledOnTouchOutside(false);

        setContentView(R.layout.load_dialog);
        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.width = WindowManager.LayoutParams.WRAP_CONTENT;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        getWindow().setAttributes(params);
    }
    @Override
    public void show()
    {
        super.show();
    }
}

以上代码中,我们设置了不可取消对话框,在实际开发中,我们可以根据需求提供一个公开的方法供外部调用。除此之外,比如提示文本类容等,也可以暴露方法出来,本文的例子只实现了一个简单的进度对话框。

2.3 使用


      CustomDialog dialog = new CustomDialog(this);
        dialog.show();

在acitvity中调用如上方法就可以显示对话框,隐藏的使用对话框的dismiss()方法。

3、 存在问题

3.1 宽度过宽

代码写完,演示效果的时候,我们发现对话框度出现了问题:在按照5.0以上系统左右俩边留白了,对话框实际宽度大于我们布局宽度,先看
效果图。

 

解决宽度留白问题:

    <style name="CustomDialog" parent="Theme.AppCompat.Dialog">
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

首先我们自定义style,继承于Theme.AppCompat.Dialog,重写俩个属性,其中

  • android:backgroundDimEnabled:表示页面时候变暗,我们设置false,不变暗
  • android:windowBackground:表示背景颜色,我们这种为透明,因为我们给布局文件背景设置了圆角,如果不设置对话框为透明的话,圆角部分会留白

创建好自定义样式后,我们只要在创建对话框的时候调用另外重载构造方法设置样式就可以new CustomDialog(this, R.style.CustomDialog)解决宽度不适配问题。

下看下效果图:

 

3.2 修改颜色

搞定宽度问题后,如何修改进度条颜色呢,当时我也在这个地方卡了半个多小时,后来一层一层的点安卓资源文件才发现在主题下有个colorAccent值控制对话框颜色,其实他的意思是着重色,像按钮,toolbar都是默认采用这个颜色。我们在自定义样式中加上这个就行。
如下代码:

    <style name="CustomDialog" parent="AppTheme">
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="colorAccent">#ffE91E63</item>
    </style>

这里需要注意的是使用colorAccent兼容低版本,而不是android:colorAccent。

QT基础控件 进度条ProgressDialog基础、高级和样式表使用 QProgressDialog类提供了多种函数,用于配置和控制进度对话框的行为。构造函数:QProgressDialog提供了两种构造函数。默认构造函数创建一个进度对话框,而另一个构造函数允许你指定标签文本、取消按钮文本、最小值和最大值。autoClose():返回进度对话框在达到最大值时是否自动关闭的状态。autoReset():返回进度对话框在达到最大值时是否自动重置的状态。labelText():返回进度对话框上显示的标签文本。maximum():返回进度对话框的最大值。 阅读详情

相关推荐

Android自定义ProgressDialog的四种样式设计与实现

本文还有配套的精品资源,点击获取 简介:ProgressDialog是Android应用中用于展示后台任务进度的组件。本教程将教你如何深入自定义ProgressDialog,包括基本用法、主题样式、布局定制、动画效果和交互逻辑,以提供四种不同样式,从而增强用户体验。 1. ProgressDialog基本用法 ProgressDialog 是 And...

weixin_42466723的博客 2022

ProgressDialog用法详解

转载自:https://www.cnblogs.com/rwind/p/5483652.html ProgressDialog的基本用法 ProgressDialog为进度对话框。android手机自带的对话框显得比较单一,我们可以通过ProgressDialog来自己定义对话框中将要显示出什么东西。 首先看看progressDialog里面的方法 setProgressStyle:设置进度条风格,风格为圆形,旋转的。 setTitlt:设置标题 setMessage:设置...

JerryQuery的博客 4955

MaterialDesign风格进度对话框实现与应用

Material Design 自2014年由 Google 推出以来,已成为 Android 平台 UI 设计的行业标准。它不仅定义了一套视觉语言,更构建了从色彩、排版、动效到组件行为的完整系统化设计哲学。在实际开发中,尤其是构建如进度对话框这类高频使用的交互控件时,遵循 Material Design 规范并结合项目需求进行主题自定义,是保障用户体验一致性和品牌识别度的关键环节。本章将深入剖析 Material Design 的核心设计原则,并结合 Android 主题系统机制,展示如何通过。

weixin_42575109的博客 1243

Android中ProgressDialog的用法

Android中有一个进度对话框,可以实现等待进度和具有具体数值进度的显示。说白了,一个是圆形进度条,一个是横向进度条。但是原生的,大家都明白,比较丑,一般不是很符合公司UI的规范。正常情况下我们都是要自己自定义一个Dialog或者使用三方的一些控件库。不过如果我们开发一些对于细节UI要求不是很高,可以使用原生控件的弹框等场景,可以考虑使用这种控件,毕竟不用引用三方,也不用自定义,使用起来自然是快捷方便的。所以今天我们介绍一下这个ProgressDialog对话框。 1.ProgressDialog相关常

水月洞天 1万+

Android登录模块实战:从高仿QQ项目学习企业级架构与安全实现

在Android应用开发中,登录模块是连接用户与服务的核心入口,其设计直接关系到用户体验与数据安全。从技术原理层面看,一个健壮的登录系统通常采用分层架构,如MVVM模式,通过ViewModel管理UI状态,Repository层统一处理数据源,实现业务逻辑与界面解耦。在工程实践中,网络请求的封装尤为关键,Retrofit配合OkHttp拦截器能优雅处理认证、日志与错误统一管理,而Kotlin协程则提供了更简洁的异步任务调度方案。这些技术的核心价值在于构建可维护、可测试且高性能的客户端代码结构。在安全领域,密

weixin_29171087的博客 229

Android登录模块实战:从UI到网络请求的完整实现与工程化封装

在Android应用开发中,登录功能是连接用户与服务的核心模块,它涉及UI交互、数据验证、网络通信与本地存储等多个关键技术环节。其实现原理通常遵循MVC/MVP等设计模式,通过Activity/Fragment管理视图,结合EditText、Button等基础控件收集用户输入,并利用OkHttp或Retrofit等网络库发起异步请求,处理服务器返回的JSON数据。这一流程的技术价值在于,它将分散的Android知识点串联成完整的业务闭环,是初学者进阶工程化开发的关键跳板。在实际应用场景中,一个健壮的登录模块

weixin_30036289的博客 272

Android 自定义progressDialog实现

我们在项目中经常会遇到这样一个应用场景:执行某个耗时操作时,为了安抚用户等待的烦躁心情我们一般会使用进度条之类的空间,在android中让大家最 容易想到的就是progressbar或者progressDialog,区别在于前者是一个控件,后者是对话框。由于一些需求在弹出进度条时不希望用户 能够操作其他控件,所以只能使用progressDialog,这个时候有遇到了一个问题,我不想要progr

小康的专栏 890

新手也能搞定!用ADS 2023从零设计一个超宽带Wilkinson功分器(附完整版图)

本文详细介绍了如何使用ADS 2023从零开始设计超宽带Wilkinson功分器,涵盖介质板参数设置、微带线计算优化、版图生成验证等关键步骤。通过实例演示和常见问题排查,帮助射频工程新手快速掌握功分器设计技巧,提升设计效率。

weixin_42692935的博客 476

android 对话框(Dialog)使用(2)

参考:android 对话框(Dialog)使用:http://blog.youkuaiyun.com/u012005313/article/details/58153917#t8 之前总结了基本的关于 dialog 的使用,经过一段时间的学习,对 dialog 的使用又有了一些新的体会。下面加入一些新的操作,同时完善之前的内容。主要内容 自定义对话框 - 登录界面的实现 设置 activity 为对话框样式

u012005313的专栏 2143

FairyGUI深度解析:Unity复杂UI开发的高效解决方案与性能优化

在Unity游戏和应用开发中,UI系统的性能与开发效率是核心挑战。原生UGUI的组件化模型在应对复杂、动态界面时,常面临Draw Call过高、层级管理臃肿的问题。其原理在于,每个UI元素对应一个GameObject,渲染合批受限于Transform层级与材质状态,易导致性能瓶颈。FairyGUI(FGUI)作为一种专业的第三方UI解决方案,其技术价值在于采用了截然不同的“舞台-显示对象”渲染模型。该模型通过内部轻量级对象管理与自主合批系统,实现了极高的运行时效率与Draw Call优化。在应用场景上,FG

weixin_31315567的博客 339

1.2 固态变压器:传统工频变压器的局限与SST的技术起源

本小节明确传统工频变压器在电力系统中的基础定位与核心工作特性,系统分析其在新型电力系统场景下的固有技术瓶颈,梳理固态变压器(Solid State Transformer, SST,又称电力电子变压器Power Electronic Transformer, PET)从概念提出到工程化成熟的完整演进路径,为后续SST技术优势、设计需求与规范符合性要求的讲解建立底层逻辑,同时对应GB/T 40429-2021《电力电子变压器通用技术要求》的需求制定背景。

技术工作者 656

Android进度指示器演进与最佳实践

在移动应用开发中,进度指示器是提升用户体验的关键组件。从技术原理看,这类组件通过视觉反馈缓解用户等待焦虑,其实现方式经历了从阻塞式对话框到非侵入式设计的演进。现代Android开发推荐使用ProgressBar、SwipeRefreshLayout等组件,它们解决了传统ProgressDialog存在的生命周期问题和交互阻塞缺陷。结合骨架屏和Lottie动画等热词技术,开发者可以创建更流畅的加载体验。这些优化方案在电商、社交等高频交互场景中尤为重要,能显著降低用户跳出率。本文以Android平台为例,详细解

weixin_33946020的博客 557

Android 13.0 framework层系统手势增加上滑手势home事件功能(相当于Home键)

在13.0的定制化开发系统手势功能的时候,客户需求要求在上滑手势的时候,在底部上滑时候进入系统桌面,也就是增加 home键功能,所以就需要分析相关的系统手势上滑事件,然后添加home事件这样 就可以实现这个功能了

安卓兼职framework和app工程师的博客 1132

万能的dialog库(包括类似popwindow效果)

博主最近发现了一个万能的dialog库一、目前这个库具有的主要功能如下:material风格(v7支持包中的),ios风格,自动获取顶层activity,可在任意界面弹出,可在任意线程弹出。(也就是说安卓也可以实现ios风格的dialog,666,是不是吊炸天呢?博主再也不会被ios哥们嘲笑了。博主也可以轻松实现它们系统dia...

weixin_33989780的博客 107

Openclaw接入大模型API,操作本地windows文件

本文介绍了在WSL2环境下配置OpenClaw使用阿里百炼API的方法。主要内容包括:1)确认WSL2安装完成;2)配置阿里百炼API(需注意Qwen3-Max-Thinking为收费模型);3)提供正确的JSON配置格式示例,强调apiKey必须填写真实值;4)说明配置错误需修改Linux配置文件;5)建议通过询问模型信息验证连接成功。后续将介绍如何切换免费API及本地文件访问功能。

qq_27246521的博客 988

【Unity】Gif图片播放插件(支持UI及模型纹理渲染两种模式)

unity本身不支持GIF格式文件直接渲染, 因此一般的做法是通过加载图片,通过代码控制其循环播放、停止等,模拟动画效果,本文简单介绍一下某个现有开源工具,感谢开源作者。

灵境引路人 4036

MaterialLoadingProgressBar 使用教程

MaterialLoadingProgressBar 是一个开源的 Android 进度条库,它提供了 Material Design 风格的加载进度条。该项目旨在帮助开发者轻松实现美观且功能丰富的进度条,以提升用户体验。 ## 项目快速启动 ### 添加依赖 首先,在你的 `build.gradle` 文件中添加以下依赖: ```groovy dependencies { imp...

gitblog_00030的博客 483

蓝鸟四轴飞控系统C程序V3.0(基础版本)深度解读

2. 解析遥控通道数据(油门 / 横滚 / 俯仰 / 偏航),转换为标准化值(-1000~+1000);3. 封装PID初始化(PID_Init,配置KP/KI/KD、输出限幅、积分限幅);,包含姿态角(Attitude_Data.Roll/Pitch/Yaw)、角速度(Gyro_Data.X/Y/Z)、遥控值(RC_Data[0~5])、电池电压(Bat_Volt)、电机PWM值(Motor_PWM[0~3])、系统状态(Sys_State),校验和通过Check_Sum()函数计算;

搏博的专栏 343

ProgressDialog的详细使用总结

ProgressDialog的详细使用方式总结 简单演示 静态方法实例化ProgressDialog 常规方法实例化 设置样式 设置点击空白返回,返回键返回 设置按钮 调用Show方法将Dialog显示出来 进度的设置及不确定状态的使用 简单演示常用方法总结1.静态方法实例化ProgressDialog(只能创建圆形条) ProgressDialog.show(Context context, Ch

Brioal Is Hardworking 1万+

OpenClaw 预置技能完全指南

OpenClaw 技能(Skills)是扩展 AI 助手能力的插件系统。🔐 管理密码和敏感信息(1Password)📝 操作 Apple Notes 和 Reminders🔍 实时搜索互联网(Brave Search)🎨 生成和编辑图片(Nano Banana Pro)📧 收发邮件(Himalaya)🏠 控制智能家居(OpenHue、Eight Sleep)💬 发送消息(iMessage、WhatsApp、Slack)🎵 控制音乐播放(Spotify、Sonos)

Maynor的博客 1701

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

自定义ProgressDialog (进度框)

先看下最终效果 : 一、代码编写 布局文件:layout_load_dialod.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="100dp" android:layout_he...

qq_19688207的博客 1439

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

progressdialog进度框_使用ProgressDialog创建进度对话框

ProgressDialog代表了进度对话框,程序只要创建ProgressDialog实例,并将它显示出来就是一个进度对画框。使用ProgressDialog创建进度对话框有如下两种方式。①如果只是创建简单的对话框,调用ProgressDialog提供的静态show()方法显示对话框即可。②创建ProgressDialog,然后调用方法对对话框里的进度条进行设置,设置完成后将对话框显示出来即可。为...

weixin_28778547的博客 798

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

自定义progressdialog

当执行某个操作需要耗时15秒以上,为了避免降低用户体验,可以使用进度条一类的UI控件。Android Framework提供了ProgressDialog,可以很好的解决这个问题。 ProgressDialog是AlertDialog的子类,有两种不同的表现形式。 第一种是针对没有明确的进度,不知道当前完成了多 少的情况,此时使用一个转动的圆环来展现; 第二种是针对有了明确的总进度,并知道当

wu_lai_314的专栏 1874

ProgressDialog(带进度条的对话框)的基本使用

ProgressDialog和AlertDialog有点类似,都可以在界面上弹出一个对话框,都能够屏蔽掉其他控件的交互能力。不同的是,ProgressDialog会在对话框中显示一个进度条,一般用于表示当前操作比较耗时,让用户耐心地等待。他的用法和AlertDialog也比较相似。 效果图:   activity_main.xml代码: &lt;?xml version="1.0...

Android_小牧的博客 4988

自定义ProgressDialog

一.动画效果的progressDialog如下图:                                                         加载框中的图片不断变化,那就让我们看看是怎么实现的吧! 第一步:在res下创建一个文件夹anim,下面放progress_animation.xml,动画列表文件progress_animation.xml xml ve

旺帝春心 417
上一篇: 解决模拟器安装不了apk
下一篇: Android颜色值参考
ChengLuo.
博客等级 码龄11年 144粉丝 35原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值