先看下最终效果 :
一、代码编写
布局文件:layout_load_dialod.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
android:background="@drawable/shape_dialog_bg"
android:layout_centerInParent="true"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<ProgressBar
android:id="@+id/pb_load"
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_centerInParent="true"/>
</RelativeLayout>
<TextView
android:id="@+id/tv_load_dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="正在加载数据"
android:textColor="#9a9b98"
android:textSize="12sp"/>
</LinearLayout>
shape文件:drawable/shape_dialog_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners android:radius="8dp" />
<solid android:color="#88000000" />
</shape>
代码文件:ZDYProgressDialog.java
package com.chy.tools;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.WindowManager;
import com.chy.environmentprotection.R;
/**
* 自定义加载提醒框
* */
public class ZDYProgressDialog extends ProgressDialog {
public ZDYProgressDialog(Context context) {
super(context);
}
public ZDYProgressDialog(Context context,int theme) {
super(context,theme);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init(getContext());
}
/**
* 初始化方法
* */
private void init(Context context){
//设置不可取消,点击其他区域不能取消,实际中可以抽出去封装供外包设置
setCancelable(false);
setCanceledOnTouchOutside(false);
setContentView(R.layout.layout_load_dialog);
WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
getWindow().setAttributes(params);
}
@Override
public void show()
{
super.show();
}
@Override
public void dismiss() {
super.dismiss();
}
}
以上代码中,我们设置了不可取消对话框,在实际开发中,我们可以根据需求提供一个公开的方法供外部调用。除此之外,比如提示文本类容等,也可以暴露方法出来,本文的例子只实现了一个简单的进度对话框。
二、使用方法
ZDYProgressDialog loadPD = new ZDYProgressDialog(this);
loadPD.show();
三、存在问题
3.1 宽度过宽
代码写完,演示效果的时候,我们发现对话框度出现了问题:在按照5.0以上系统左右俩边留白了,对话框实际宽度大于我们布局宽度,先看
效果图:
解决宽度留白问题:values/style.xml
<!--提示加载框样式-->
<style name="ZDYDialog" parent="Theme.AppCompat.Dialog">
<!--去除5.0以后两侧留白问题-->
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowBackground">@android:color/transparent</item>
<!--进度条颜色-->
<item name="colorAccent">#ffE91E63</item>
</style>
最后将二中使用方法更换为下面方式即可
ZDYProgressDialog loadPD = new ZDYProgressDialog(EditAttachmentActivity.this, R.style.ZDYDialog);
loadPD.show();