自定义提示加载数据Dialog的实现

本文介绍了在Android中如何自定义提示加载数据的Dialog,包括布局设计、颜色定义、ProgressBar样式以及activity代码的实现。通过示例代码,展示了如何在数据请求时提供用户体验反馈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在数据请求的时候,为了给用户直观的显示正在请求数据,而不是类似无响应那种,我们通常会在开始网络请求中调用progressBar展示,用于表明我正在努力加载,项目中的用法也是类似的。先看下效果图:
这里写图片描述

下面开始介绍实现。
首先我们创建一个LoadingDemo具体代码如下。先看下名为layout_loading_dialog.xml的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:background="@drawable/dialog_bg_shape"
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="10dp" >

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminateDrawable="@drawable/dialog_progressbar" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="玩命加载中…"
        android:singleLine="true"
        android:textColor="@color/content"
        android:textSize="14sp" />

</LinearLayout>

其中用到的颜色在color.xml中定义有以下:

 <!-- 基本颜色值 -->
    <color name="blue">#0000ff</color>
    <color name="white">#ffffff</color>
    <color name="transparent">#00000000</color>
    <color name="content">#555555</color>

LinearLayout布局的背景为android:background=”@drawable/dialog_bg_shape”,是一个.xml文件dialog_bg_shape.xml。它的drawable实现为

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <corners android:radius="10dp"/>
    <solid android:color="@color/white"/>
</shape>

而progressBar的indeterminateDrawable属性设置为自己实现的dialog_progressbar,也是一个xml文件dialog_progressbar.xml。它的drawable实现如下

<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/loading_progress"
    android:pivotX="50%"
    android:pivotY="50%" />

activity代码如下:

public class MainActivity extends Activity {
    //加载对话框
    private Dialog mLoadingDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        showDialog("开始加载..");
        //延迟3s后取消
        handler.sendEmptyMessageDelayed(1, 3*1000);
    }

    @SuppressLint("HandlerLeak")
    Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
                case 1:
                    cancelDialog();
                    break;
                default:
                    break;
            }
        };
    };



    /**
     * 展示对话框
     * @param content 对话框显示内容
     */
    private void showDialog(String content) {
        Viewview=LayoutInflater.from(this).inflate(R.layout.layout_loading_dialog, null);
        TextView loadingText = (TextView)view.findViewById(R.id.text);
        loadingText.setText(content);

        mLoadingDialog = new Dialog(this, R.style.loading_dialog_style);
//      对话框是否可以取消
        mLoadingDialog.setCancelable(true);
        mLoadingDialog.setContentView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
        mLoadingDialog.show();      
    }

    /**
     * 取消对话框
     */
    private void cancelDialog() {
        if(mLoadingDialog != null && mLoadingDialog.isShowing()) {
            mLoadingDialog.cancel();
        }
    }

}

这里的R.style.loading_dialog_style为:

<style name="loading_dialog_style" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>

总结:上述代码是我在项目中用到dialog的一种,还有一些其他的形式,不过大同小异,有兴趣的可以继续深入学习。
Demo链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值