版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SKYYYF/article/details/84333596
public class ProgressDialogUtil {
private static final int START_DIALOG = 0;//开始对话框
private static final int UPDATE_DIALOG = 1;//更新对话框
private static final int STOP_DIALOG = 2;//销毁对话框
private static AlertDialog dialog = null;
private static TextView title = null;
private static Context context = null;
private static Handler handler = new Handler(Looper.getMainLooper()) {
public void handleMessage(android.os.Message msg) {
String message = "";
switch (msg.what) {
case START_DIALOG:// 启动加载框
message = (String) msg.obj;
if (dialog != null) {
stopLoad();
startLoad(context, message);
return;
}
init(message);
isTouchDismiss(true);
break;
case UPDATE_DIALOG:// 更新加载框
message = (String) msg.obj;
if (title.VISIBLE == View.VISIBLE) {
if (TextUtils.isEmpty(message)) {
title.setVisibility(View.GONE);
} else {
title.setText(message);
}
} else {
if (!TextUtils.isEmpty(message)) {
title.setText(message);
title.setVisibility(View.VISIBLE);
}
}
break;
case STOP_DIALOG:// 停止加载框
if (dialog != null) {
dialog.dismiss();
dialog.cancel();
dialog = null;
title = null;
}
break;
}
}
;
};
/**
* @方法说明:加载控件与布局
* @方法名称:init
* @返回值:void
*/
private static void init(String mssg) {
if (isBackground(context)) {// 如果程序在后台,则不加载
return;
}
if (null != context) {
LayoutInflater flat = LayoutInflater.from(context);
View v = flat.inflate(R.layout.loading, null);
// v.setBackgroundColor(context.getResources().getColor(android.R.color.transparent));
// 创建对话
dialog = new AlertDialog.Builder(context, R.style.dialog).create();
// 设置返回键点击消失对话框
dialog.setCancelable(true);
// 设置点击返回框外边不消失
dialog.setCanceledOnTouchOutside(true);
// 给该对话框增加系统权限
// dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
// 显示对话
dialog.show();
// 加载控件
title = (TextView) v.findViewById(R.id.loading_title);
if (TextUtils.isEmpty(mssg)) {
title.setVisibility(View.GONE);
} else {
title.setVisibility(View.VISIBLE);
title.setText(mssg);
}
// 必须放到显示对话框下面,否则显示不出效果
Window window = dialog.getWindow();
// window.getAttributes().x = 0;
// window.getAttributes().y = 0;//设置y坐标
WindowManager.LayoutParams params = window.getAttributes();
params.width = ViewGroup.LayoutParams.WRAP_CONTENT;
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
params.gravity = Gravity.CENTER;
// params.alpha = 0.6f;
window.setAttributes(params); // 加载布局组件
dialog.getWindow().setContentView(v);
}
}
/**
* @param msg
* @方法说明:启动对话框
* @方法名称:startLoad
* @返回值:void
*/
public static void startLoad(Context act, String msg) {
// context = ActivityManager.newInstance().currentActivity();// 获取当前的activity的上下文
context = act;
if (context == null) {
return;
}
if (isBackground(context)) {// 如果程序在后台,则不加载
return;
}
Message mssage = new Message();
mssage.what = START_DIALOG;
mssage.obj = msg;
handler.sendMessage(mssage);
}
/**
* @param msg
* @方法说明:更新显示的内容
* @方法名称:UpdateMsg
* @返回值:void
*/
public static void UpdateMsg(String msg) {
Message message = new Message();
message.what = UPDATE_DIALOG;
message.obj = msg;
handler.sendMessage(message);
}
/**
* @param flag
* @方法说明:允许加载条转动的时候去点击系统返回键
* @方法名称:openCancelable
* @返回值:void
*/
public static void openCancelable(boolean flag) {
if (dialog != null) {
dialog.setCancelable(flag);
}
}
/**
* @param isdimiss
* @方法说明:允许点击对话框触摸消失
* @方法名称:isTouchDismiss
* @返回值:void
*/
public static void isTouchDismiss(boolean isdimiss) {
if (dialog != null) {
dialog.setCanceledOnTouchOutside(isdimiss);
}
}
/**
* @方法说明:让警告框消失
* @方法名称:dismiss
* @返回值:void
*/
public static void stopLoad() {
handler.sendEmptyMessage(STOP_DIALOG);
}
/**
* @param context
* @return
* @方法说明:判断当前应用程序是否后台运行
* @方法名称:isBackground
* @返回值:boolean
*/
public static boolean isBackground(Context context) {
ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(context.getPackageName())) {
if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND) {
// 后台运行
return true;
} else {
// 前台运行
return false;
}
}
}
return false;
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
card_view:cardBackgroundColor="@color/color_white_stranspate"
card_view:cardCornerRadius="10dp"
card_view:cardElevation="0dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:paddingBottom="10dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="10dp">
<ProgressBar
style="@style/loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/loading_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:gravity="center"
android:textSize="14sp" />
</LinearLayout>
</android.support.v7.widget.CardView>
样式
<style name="loading">
<item name="android:indeterminate">true</item>
<item name="android:indeterminateDrawable">@drawable/progressloading</item>
<item name="android:indeterminateDuration">1200</item>
<item name="android:indeterminateOnly">true</item>
</style>