美文网首页Android
一个自定义的LoadingDialog

一个自定义的LoadingDialog

作者: BTPJ | 来源:发表于2017-10-23 09:38 被阅读0次

    自己的工具代码库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加载

    相关文章

      网友评论

        本文标题:一个自定义的LoadingDialog

        本文链接:https://www.haomeiwen.com/subject/ekyouxtx.html