Android

一个自定义的LoadingDialog

2017-10-23  本文已影响0人  BTPJ

自己的工具代码库https://github.com/BTPJ/LTPViewAndUtils
1.Java代码

import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;

import waternewton.com.oa.R;

/**
 * 自定义的LoadingDialog
 *
 * @author LTP 2017/9/2
 */
public class LoadingDialog extends Dialog {

    public LoadingDialog(Context context) {
        super(context);
    }

    private LoadingDialog(Context context, int theme) {
        super(context, theme);
    }

    /**
     * 给Dialog设置提示信息
     *
     * @param message 显示信息
     */
    public void setMessage(CharSequence message) {
        if (message != null && message.length() > 0) {
            findViewById(R.id.message).setVisibility(View.VISIBLE);
            TextView txt = (TextView) findViewById(R.id.message);
            txt.setText(message);
            txt.invalidate();
        }
    }

    /**
     * 弹出自定义LoadingDialog
     *
     * @param context        上下文
     * @param message        提示文本
     * @param cancelable     是否按返回键取消
     * @param cancelListener 按下返回键监听
     * @return 自定义的LoadingDialog
     */
    public static LoadingDialog show(Context context, CharSequence message, boolean cancelable, OnCancelListener cancelListener) {
        LoadingDialog dialog = new LoadingDialog(context, R.style.Custom_Progress);
        dialog.setTitle("");
        dialog.setContentView(R.layout.dialog_loading);
        if (message == null || message.length() == 0) {
            dialog.findViewById(R.id.message).setVisibility(View.GONE);
        } else {
            TextView txt = (TextView) dialog.findViewById(R.id.message);
            txt.setText(message);
        }
        // 按返回键是否取消
        dialog.setCancelable(cancelable);
        // 点击外部是否取消
        dialog.setCanceledOnTouchOutside(false);
        // 监听返回键处理
        dialog.setOnCancelListener(cancelListener);
        // 设置居中
        dialog.getWindow().getAttributes().gravity = Gravity.CENTER;
        WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
        // 设置背景层透明度
        lp.dimAmount = 0.2f;
        dialog.getWindow().setAttributes(lp);
        dialog.show();
        return dialog;
    }
}

2.LoadingDialog的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/progress_custom_bg"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:paddingBottom="20dp"
    android:paddingLeft="30dp"
    android:paddingRight="30dp"
    android:paddingTop="20dp">

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:text="加载中..."
        android:textColor="#FFFFFF" />

</LinearLayout>

3.styles.xml自定义样式中添加dialog背景透明的样式

  <!-- 自定义LoadingDialog -->
    <style name="Custom_Progress" parent="@android:style/Theme.Dialog">
        <!--设置背景透明(四个圆角边就不会有背景)-->
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

4.可以参考http://blog.csdn.net/tmacadai/article/details/73612120高仿IOS加载

上一篇下一篇

猜你喜欢

热点阅读