Android自定义加载框效果

yizhihongxing

下面是一份详细的攻略,希望能对您有所帮助。

Android自定义加载框效果

简介

在Android应用程序中,经常需要使用到数据加载框,用以提示用户正在等待数据加载,请稍候。Android系统提供了ProgressDialog组件,可以满足基本的需求,但是其官方提供的样式较为简单,不能满足我们的需求。

因此,我们需要对加载框进行自定义,根据自己的需求添加自己的样式。

实现步骤

  1. 第一步:新建自定义加载框的布局文件

在res/layout/目录下,新建custom_loading_dialog.xml文件,用来定义我们自己的加载框布局。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/custom_loading_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@drawable/custom_loading_background"
        android:gravity="center">

        <ProgressBar
            android:id="@+id/custom_loading_progress_bar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true" />

        <TextView
            android:id="@+id/custom_loading_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/custom_loading_progress_bar"
            android:layout_centerHorizontal="true"
            android:paddingTop="12dp"
            android:text="加载中..."
            android:textColor="@android:color/white"
            android:textSize="14sp" />
    </RelativeLayout>

</FrameLayout>

其中,我们使用了FrameLayout包裹RelativeLayout布局,是为了在布局中添加蒙层,使加载框位于顶层。

RelativeLayout布局中,我们添加了ProgressBar进度条和TextView文本控件,用于显示提示信息。同时我们添加了一个自定义Drawable作为背景,以实现美观的效果。

  1. 第二步:定义自定义Drawable

在res/drawable/目录下,新建custom_loading_background.xml文件,用来定义我们自己的Drawable背景。

<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <corners android:radius="6dp" />

    <gradient
        android:endColor="#3F51B5"
        android:startColor="#303F9F"
        android:type="linear" />

</shape>

我们使用了ShapeDrawable,并定义了圆角矩形和线性渐变效果。

  1. 第三步:创建自定义加载框

在需要使用的地方,创建自定义的加载框。

private Dialog dialog;

private void showLoadingDialog() {
    if (dialog == null) {
        dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar);
        dialog.setContentView(R.layout.custom_loading_dialog);
        dialog.setCancelable(false);
    }
    dialog.show();
}

我们使用了Android系统提供的Dialog组件,并指定了它的主题为透明无标题栏主题。这里我们使用了一个成员变量dialog,如果需要多次使用,只需要检查dialog是否为空即可,避免重复创建。

  1. 第四步:关闭自定义加载框

在需要关闭加载框的地方,调用下面的方法即可:

private void hideLoadingDialog() {
    if (dialog != null && dialog.isShowing()) {
        dialog.dismiss();
    }
}

我们检查dialog是否存在,以及是否在显示状态,如果是,则将其关闭。

示例说明

示例1:调用系统提供的ProgressDialog

如果我们只是需要一个基本的loading框,我们可以直接使用ProgressDialog组件来实现。下面是一个简单的示例:

private ProgressDialog progressDialog;

private void showProgressDialog() {
    if (progressDialog == null) {
        progressDialog = new ProgressDialog(this);
        progressDialog.setCanceledOnTouchOutside(false);
        progressDialog.setMessage("Loading...");
    }
    progressDialog.show();
}

private void hideProgressDialog() {
    if (progressDialog != null && progressDialog.isShowing()) {
        progressDialog.dismiss();
    }
}

这里我们使用了ProgressDialog组件,并设置了其消息和点击外部不可取消属性。

示例2:自定义加载框

如果我们需要一个自定义的加载框,我们可以使用上面的步骤,在需要的地方创建一个自定义的加载框。下面是一个示例:

private Dialog dialog;

private void showLoadingDialog() {
    if (dialog == null) {
        dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar);
        dialog.setContentView(R.layout.custom_loading_dialog);
        dialog.setCancelable(false);
    }
    dialog.show();
}

private void hideLoadingDialog() {
    if (dialog != null && dialog.isShowing()) {
        dialog.dismiss();
    }
}

这里我们使用了自定义Dialog组件,以及自定义布局和背景,实现了一个简单的自定义加载框。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android自定义加载框效果 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Windows32位/64位系统最大支持多大内存及不支持的原因

    Windows 32位/64位系统最大支持多大内存及不支持的原因 Windows操作系统有两种版本:32位和64位。它们在支持的最大内存容量上有所不同,并且不支持的原因也不同。 32位系统 32位系统最大支持的内存容量是4GB(2^32字节)。然而,实际上,32位Windows系统只能使用3GB到3.5GB的内存,因为一部分内存地址空间被保留给系统硬件和其他…

    other 2023年7月28日
    00
  • laravel事务

    在Laravel中,事务是一种用于管理数据库操作的机制,它可以确保在一组操作中,如果任何一个操作失败,则所有操作都将回滚。以下是完整攻略,介绍了如何在Laravel中使用事务。 步骤1:创建事务 可以使用Laravel的DB门面来创建事务。以下是一个示例: DB::beginTransaction(); 在上述示例中,我们使用门面的beginTransact…

    other 2023年5月6日
    00
  • vue封装自定义分页器组件与使用方法分享

    下面详细讲解“Vue封装自定义分页器组件与使用方法分享”的攻略: 1. 前言 在实际开发中,分页器是一个非常重要的组件,它可以帮助我们展示大量数据并提高用户的浏览效率。但是,常见的分页器组件往往无法满足我们的需求,因此我们需要自己动手来封装一个自定义的分页器组件。本篇攻略将会介绍如何封装自定义分页器组件并提供两个使用示例。 2. 分页器组件的设计 首先,我们…

    other 2023年6月25日
    00
  • CP Header 常见端口

    CP Header 常见端口的完整攻略 CP Header是一种网络协议,用于在计算机之间传输数据。在使用CP Header时,需要了解常见端口,以便正确地配置网络连接。本文将提供CP Header常见端口的完整攻略,包括以下: CP Header常见端口的基本概念 CP Header常见端口的列表 示例 CP Header常见端口的基本概念 CP Head…

    other 2023年5月6日
    00
  • 办公室电脑数据防泄密、企业重要文档防复制、商业机密防泄漏解决方案

    办公室电脑数据防泄密解决方案 1. 硬件加密 如果办公室电脑中存储了重要的数据,我们建议用硬件加密来保护数据安全。常见的硬件加密方案有: 加密外置硬盘:可以选择带有硬件加解密功能的移动硬盘,例如西部数据的WD My Passport硬盘。该硬盘具有密码保护、硬件加密等功能,确保数据安全。 加密USB存储设备:有些USB存储设备可以使用密码来保护数据,例如金士…

    other 2023年6月27日
    00
  • win系统中XP必联电子阿里智能路由器动态IP上网的详细设置教程

    Win系统中XP必联电子阿里智能路由器动态IP上网的详细设置教程 本教程将详细介绍如何在Windows XP操作系统中使用XP必联电子阿里智能路由器进行动态IP上网设置。以下是完整的攻略: 步骤一:连接路由器 将XP必联电子阿里智能路由器连接到电源,并确保其正常启动。 使用网线将路由器的LAN口与计算机的网卡连接。 步骤二:访问路由器设置页面 打开任意浏览器…

    other 2023年7月31日
    00
  • Windows无法自动将IP协议堆栈绑定到网络适配器 的解决办法

    Windows无法自动将IP协议堆栈绑定到网络适配器的解决办法 如果你在Windows中遇到了”Windows无法自动将IP协议堆栈绑定到网络适配器”的错误信息,那么你并不是孤单的。这个错误信息通常出现在你尝试连接互联网或者内部网络时,而导致连接失败。 产生这个问题的可能原因 首先,在排除这种问题时,我们需要先考虑一些可能导致这个错误信息出现的因素。以下是一…

    其他 2023年3月28日
    00
  • div嵌套html不用iframe

    当需要在HTML中嵌套其他HTML内容时,可以使用div元素来实现,而不必使用iframe。下面是使用div嵌套HTML的攻略: 创建一个父div元素,用于容纳要嵌套的HTML内容。 在父div元素内部添加子div元素,用于放置要嵌套的HTML内容。 使用CSS样式来控制子div元素的大小和位置,以确保嵌套的HTML内容正确显示。 下面是两个示例说明: 示例…

    other 2023年7月27日
    00
合作推广
合作推广
分享本页
返回顶部