【Android组件】封装加载弹框

📖封装加载弹框

    • ✅1. 构造LoadingDialog
    • ✅2. 调用LoadingDialog

效果:

111

✅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);}});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[数据结构] 归并排序快速排序 及非递归实现

&#xff08;&#xff09;标题&#xff1a;[数据结构] 归并排序&&快速排序 及非递归实现 水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 (一)快速排序 类比递归谋划非递归 快速排序的非递归实现&#xff1a; &#xff08;二&#xff09;归并排序 归…

Elasticsearch文档_id以数组方式返回

背景需求是只需要文档的_id字段&#xff0c;并且_id组装成一个数组。 在搜索请求中使用 script_fields 来整理 _id 为数组输出&#xff1a; POST goods_info/_search?size0 {"query": {"term": {"brand": {"value": "MGC"…

明白这两大关键点,轻松脱单不再是难题!

很多未婚男女都渴望找到心仪的伴侣&#xff0c;建立稳定的情感关系&#xff0c;但往往在脱单的过程中跌跌撞撞。平时与同学、同事之间相处得很融洽&#xff0c;一旦遇到心仪的异性&#xff0c;情商直接掉线&#xff0c;难道情商也会选择性地发挥作用吗&#xff1f;其实&#xf…

什么牌子的开放式耳机好用?南卡、Cleer、小米、开石超值机型力荐!

​开放式耳机在如今社会中已经迅速成为大家购买耳机的新趋势&#xff0c;深受喜欢听歌和热爱运动的人群欢迎。当大家谈到佩戴的稳固性时&#xff0c;开放式耳机都会收到一致好评。对于热爱运动的人士而言&#xff0c;高品质的开放式耳机无疑是理想之选。特别是在近年来的一些骑…

AnimateLCM:高效生成连贯真实的视频

视频扩散模型因其能够生成连贯且高保真的视频而日益受到关注。然而&#xff0c;迭代去噪过程使得这类模型计算密集且耗时&#xff0c;限制了其应用范围。香港中文大学 MMLab、Avolution AI、上海人工智能实验室和商汤科技公司的研究团队提出了AnimateLCM&#xff0c;这是一种允…

电子电气架构 --- 关于DoIP的一些闲思 上

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

JavaDS —— 单链表 与 LinkedList

顺序表和链表区别 ArrayList &#xff1a; 底层使用连续的空间&#xff0c;可以随机访问某下标的元素&#xff0c;时间复杂度为O&#xff08;1&#xff09; 但是在插入和删除操作的时候&#xff0c;需要将该位置的后序元素整体往前或者向后移动&#xff0c;时间复杂度为O&…

什么是智能制造?

科技的每一次飞跃都深刻改变着我们的生产生活方式。其中&#xff0c;智能制造作为工业4.0的核心概念&#xff0c;正引领着全球制造业向更加高效、灵活、智能的方向迈进。那么&#xff0c;究竟什么是智能制造&#xff1f;它如何重塑我们的工业版图&#xff0c;又将对未来社会产生…

TTT架构超越Transformer,ML模型替代RNN隐藏状态!

目录 01 算法原理 02 骨干架构 03 实验结果 一种崭新的大语言模型&#xff08;LLM&#xff09;架构有望取代当前主导 AI 领域的 Transformer&#xff0c;并在性能上超越 Mamba。 论文地址&#xff1a;https://arxiv.org/abs/2407.04620 本周一&#xff0c;关于 Test-Time Tr…

修复 Ubuntu 24.04 Dock 丢失应用程序图标

找出应用程序窗口的类名 首先&#xff0c;您需要启动应用程序窗口。然后&#xff0c;按 Alt F2 启动“运行 Command”对话框。当对话框打开时&#xff0c;输入 lg 并按 Enter 键。 在该窗口中&#xff0c;单击Windows按钮&#xff0c;然后找出目标应用程序窗口的类名称。 在/…

Flutter——最详细(Table)网格、表格组件使用教程

背景 用于展示表格组件&#xff0c;可指定线宽、列宽、文字方向等属性 属性作用columnWidths列的宽度defaultVerticalAlignment网格内部组件摆放方向border网格样式修改children表格里面的组件textDirection文本排序方向 import package:flutter/material.dart;class CustomTa…

公众号运营秘籍:8 大策略让你的粉丝翻倍!

在当今信息爆炸的时代&#xff0c;微信公众号的运营者们面临着前所未有的挑战&#xff1a;如何在这个充满竞争的红海中脱颖而出&#xff0c;吸引并留住粉丝&#xff1f;事实上&#xff0c;微信公众号的红利期并未完全过去&#xff0c;关键在于我们如何策略性地运营&#xff0c;…

使用PEFT库进行ChatGLM3-6B模型的QLORA高效微调

PEFT库进行ChatGLM3-6B模型QLORA高效微调 QLORA微调ChatGLM3-6B模型安装相关库使用ChatGLM3-6B模型GPU显存占用准备数据集加载数据集数据处理数据集处理加载量化模型-4bit预处理量化模型配置LoRA适配器训练超参数配置开始训练保存LoRA模型模型推理合并模型使用微调后的模型 QLO…

【Pytorch实用教程】transformer中创建嵌入层的模块nn.Embedding的用法

文章目录 1. nn.Embedding的简单介绍1.1 基本用法1.2 示例代码1.3 注意事项2. 通俗的理解num_embeddings和embedding_dim2.1 num_embeddings2.2 embedding_dim2.3 使用场景举例结合示例1. nn.Embedding的简单介绍 nn.Embedding 是 PyTorch 中的一个模块,用于创建一个嵌入层。…

准大一新生开学千万要带证件照用途大揭秘

1、提前关注好都有哪些考场&#xff0c;以及这些考场大致在网页的哪个位置。比如我选对外经贸大学&#xff0c;我就直接找到第二个点进去。 2、电脑上同时开了谷歌浏览器和IE浏览器&#xff0c;以及手机也登陆了。亲测下来&#xff0c;同一时间刷新&#xff0c;谷歌浏览器能显示…

​cesium、three.js,三维GIS为啥那么热?到底怎么学呢?

​cesium、three.js&#xff0c;三维GIS为啥那么热&#xff1f;他们的应用场景都是什么呢&#xff1f;接下来我们可以一起来看看~ 三维GIS的应用 GIS和3D的应用是趋势&#xff0c;目前已经有很多应用案例&#xff0c;例如BIM&#xff0c;智慧城市&#xff0c;数字孪生等。如下…

汇聚荣拼多多电商实力强吗?

汇聚荣拼多多电商实力强吗?汇聚荣拼多多&#xff0c;作为中国电商领域的后起之秀&#xff0c;已经在市场上占据了一席之地。那么&#xff0c;它的实力究竟如何呢?在回答这个问题之前&#xff0c;我们需要先了解一下拼多多的基本情况。拼多多是一家以社交电商为主要模式的购物…

3个方法教你如果快速绕过Excel工作表保护密码

在日常生活中&#xff0c;我们可能会遇到一些特殊情况&#xff0c;比如不小心忘记了Excel文件中设置的打开密码。别担心&#xff01;这里为您带来一份详细的Excel文件密码移除教程&#xff0c;助您轻松绕过Excel工作表保护。 方法一&#xff1a;使用备份文件 如果您有文件的备…

深入理解 go map

什么是 map 维基百科里这样定义 map: In computer science, an associative array, map, symbol table, or dictionary is an abstract data type composed of a collection of (key, value) pairs, such that each possible key appears at most once in the collection. 简单…

[nicetomeetyou@onionmail.org].Faust勒索病毒科普知识全解析

引言 随着网络技术的飞速发展&#xff0c;勒索病毒已成为威胁全球网络安全的一大隐患。[nicetomeetyouonionmail.org].Faust作为一种新型勒索病毒&#xff0c;通过其复杂的加密技术和隐蔽的传播手段&#xff0c;给个人、企业及政府机构带来了巨大的损失。本文将从多个维度全面解…