Android项目中简单易用的加载对话框

来源:互联网 发布:mysql突然高并发 编辑:程序博客网 时间:2024/06/01 09:35

在做项目中,我们经常会遇到下面这几种情形:

(1)在登录时,点击登录按钮,需要向后台验证用户名和密码,为了防止用户等待过长时间,显示个加载对话框。

(2)在进入Activity时,需要从后台加载数据,为了让用户有更好的体验,显示个加载进度框。

一个项目中,用到加载对话框的地方很多,我们可以把它写成一个工具。

实现效果图:


(1)dialog_loading_layout.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.loadingview.MainActivity">    <LinearLayout        android:layout_width="140dp"        android:layout_height="140dp"        android:background="@drawable/loading_progress_bg"        android:layout_centerInParent="true"        android:padding="8dp"        android:gravity="center"        android:orientation="vertical">        <ProgressBar            android:layout_width="wrap_content"            android:layout_height="wrap_content" />        <TextView            android:id="@+id/loading_text"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:gravity="center"            android:text="加载中,请稍后...."            android:textColor="#ffffff"/>    </LinearLayout></RelativeLayout>
(2)在drawable目录下,建立loading_progress_bg.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android">    <gradient        android:angle="270.0"        android:centerColor="#99000000"        android:centerY="0.5"        android:endColor="#99000000"        android:startColor="#99000000"></gradient>    <corners android:radius="5dp" />    <padding        android:bottom="0dp"        android:left="0dp"        android:right="0dp"        android:top="0dp"></padding></shape>
(3)DialogLoading.java

package com.example.loadingview;import android.app.Dialog;import android.content.Context;import android.widget.TextView;public class DialogLoading extends Dialog {    private TextView loadingLabel;    public DialogLoading(Context context) {        super(context,R.style.Dialog);        setContentView(R.layout.dialog_loading_layout);        setCanceledOnTouchOutside(false);    //dialog弹出后点击屏幕,dialog不消失;点击物理返回键dialog消失        loadingLabel=(TextView)this.findViewById(R.id.loading_text);    }    public void setDialogLabel(String lable){        loadingLabel.setText(lable);    }}
(4)在values文件下的styles.xml中

 <!--对话框-->    <style name="Dialog" parent="@android:style/Theme.Dialog">        <item name="android:windowFrame">@null</item>              <!--Dialog的windowFrame框为无-->        <item name="android:windowIsFloating">true</item>           <!--是否浮现在activity之上-->        <item name="android:windowIsTranslucent">false</item>        <!--是否是半透明-->        <item name="android:windowNoTitle">true</item>                <!--是否显示title-->        <item name="android:windowBackground">@color/transparent</item>  <!--设置Dialog的背景-->        <item name="android:backgroundDimEnabled">true</item>            <!--背景是否模糊显示-->        <item name="android:windowSoftInputMode">stateHidden|adjustResize</item>    </style>    <!--对话框-->
(5)在values文件下的colors.xml中

<color name="transparent">#00000000</color>

以上写完了加载对话框的工作,下面我们来使用。

(1)activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:gravity="center"    android:orientation="vertical">    <Button        android:id="@+id/btn"        android:layout_width="match_parent"        android:layout_height="50dp"        android:text="点击弹出加载对话框" /></LinearLayout>

(2)MainActivity.java

package com.example.loadingview;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;public class MainActivity extends Activity {    private Button alertDialog;    private DialogLoading loading;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        alertDialog = (Button) this.findViewById(R.id.btn);        alertDialog.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                setDialogLabel("正在加载数据。。。");                loading.show();                //loading.dismiss(); 数据加载完,可以调用这个方法            }        });    }    /**     * 设置Dialog的文字     *     * @param label     */    private void setDialogLabel(String label) {        if (loading == null) {            loading = new DialogLoading(this);        }        loading.setDialogLabel(label);    }}

这真的是一款很好的工具。





0 0