/**
* 1.数据加载框
* 2.确定弹出框
* 3.底部弹出框
* 4.选项弹出框
*/
public class DialogUtil {
private static final String TAG = DialogUtil.class.getSimpleName();
/**
* 加载框
*/
private static String progressContextStr;
private static KProgressHUD progressHUD;
public static KProgressHUD showProgressHUD(Context context, String message) {
try {
if (!context.toString().equals(progressContextStr)) {
closeProgressDialog();
}
if (progressHUD == null) {
progressContextStr = context.toString();
progressHUD = KProgressHUD.create(context)
.setStyle(KProgressHUD.Style.SPIN_INDETERMINATE)
.setAnimationSpeed(1)
.setLabel(message);
progressHUD.show();
} else {
progressHUD.setLabel(message);
if (!progressHUD.isShowing()) {
progressHUD.show();
}
}
return progressHUD;
} catch (Exception e) {
closeProgressDialog();
LogUtil.e("打开加载框报错");
return null;
}
}
/**
* 关闭加载框
*/
public static void closeProgressDialog() {
try {
if (progressHUD != null) {
progressHUD.dismiss();
progressHUD = null;
}
} catch (Exception e) {
progressContextStr = "";
progressHUD = null;
LogUtil.e("关闭加载框报错");
}
}
/**
* 确定弹出框接口
*/
public interface OnConfirmClickListener {
void onOkClick();
void onCancelClick();
}
/**
* 提示框
*
* @param content 内容
*/
public static Dialog showAlertDialog(Context context, String content) {
return showDialog(context, 0, "", content, "确定", "", null);
}
/**
* 提示框
*
* @param content 内容
* @param onConfirmClickListener 需要实现接口{@link OnConfirmClickListener}
*/
public static Dialog showAlertDialog(Context context, String content, DialogUtil.OnConfirmClickListener onConfirmClickListener) {
return showDialog(context, 0, "", content, "确定", "", onConfirmClickListener);
}
/**
* 二次确认框
*
* @param content 内容
* @param onConfirmClickListener 需要实现接口{@link OnConfirmClickListener}
*/
public static Dialog showConfirmDialog(Context context, String content, DialogUtil.OnConfirmClickListener onConfirmClickListener) {
return showDialog(context, 0, "", content, "确定", "取消", onConfirmClickListener);
}
/**
* 提示框和二次确定框的父类(完整方法,私有)
*
* @param context 上下文
* @param title 标题
* @param content 内容
* @param cancelStr 取消按钮文字
* @param okStr 确定按钮文字
* @param onConfirmDialogClickListener 需要实现接口{@link OnConfirmClickListener}
* @author XieWenjun
*/
public static Dialog showDialog(final Context context, int iconResId, String title, String content,
String okStr, String cancelStr,
final DialogUtil.OnConfirmClickListener onConfirmDialogClickListener) {
closeProgressDialog();
// if (TextUtils.isEmpty(title)) {
// title = "Tips";
// }
AlertDialogBuilder builder = new AlertDialogBuilder(context);
builder.setImageID(iconResId > 0 ? iconResId : 0);
if (!TextUtils.isEmpty(title)) {
builder.setTitle(title);
}
if (!TextUtils.isEmpty(content)) {
builder.setContent(content);
}
if (!TextUtils.isEmpty(cancelStr)) {
builder.setCancel(cancelStr);
}
if (!TextUtils.isEmpty(okStr)) {
builder.setOk(okStr);
}
builder.setOnItemClickListener(new AlertDialogBuilder.OnItemClickerListener() {
@Override
public void onOkClick(AlertDialogBuilder dialog) {
if (onConfirmDialogClickListener != null) {
onConfirmDialogClickListener.onOkClick();
}
dialog.dismiss();
}
@Override
public void onCancelClick(AlertDialogBuilder dialog) {
if (onConfirmDialogClickListener != null) {
onConfirmDialogClickListener.onCancelClick();
}
dialog.dismiss();
}
});
Dialog dialog = builder.create();
try {
dialog.show();
} catch (Exception e) {
LogUtil.e("");
}
return dialog;
}
/**
* 共用的底部弹出框(可用于滑轮选择和特别的Toast)
*
* @param context
* @param view 布局(逻辑处理)
* @return dialog 弹出框对象(逻辑处理之后关闭弹出框)
* @author XieWenjun
*/
public static Dialog showBottomDialog(final Activity context, View view) {
final Dialog dialog = new Dialog(context, R.style.ConfirmDialogStyle);
dialog.setContentView(view);
setDialogParams(dialog, context);
dialog.setCanceledOnTouchOutside(true);
// 逻辑处理通过View和返回的Dialog对象
try {
dialog.show();
} catch (Exception e) {
LogUtil.e("");
}
return dialog;
}
/**
* 底部设置参数
*/
private static void setDialogParams(Dialog dialog, Context activityContext) {
// 获取数据
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) activityContext).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
// 获取屏幕数据
Rect rect = new Rect();
View view = ((Activity) activityContext).getWindow().getDecorView();
view.getWindowVisibleDisplayFrame(rect);
// 设置Dialog布局
ViewGroup.LayoutParams layoutParams = dialog.getWindow().getAttributes();
// layoutParams.height = displayMetrics.heightPixels;
layoutParams.width = displayMetrics.widthPixels;
}
/**
* 确定弹出框接口
*/
public interface OnActionDialogListener {
void onSelect(String[] items, int index);
}
public interface OnActionAllDialogListener extends OnActionDialogListener {
void onCancel();
}
public static void showActionDialog(Context context, ArrayList<?> strList, OnActionDialogListener onActionDialogListener) {
String[] strings = new String[strList.size()];
for (int i = 0; i < strList.size(); i++) {
strings[i] = strList.get(i).toString();
}
showActionDialog(context, "", "", strings,true, onActionDialogListener);
}
public static void showActionDialog(Context context, final String[] strings, OnActionDialogListener onActionDialogListener) {
showActionDialog(context, "", "", strings,true, onActionDialogListener);
}
/**
* @param context
* @param title
* @param message
* @param strings
* @param onActionDialogListener
*/
public static void showActionDialog(Context context, String title, String message, final String[] strings,boolean canceledOnTouchOutside, final OnActionDialogListener onActionDialogListener) {
try {
ActionDialog dialog = new ActionDialog(context);
if (!TextUtils.isEmpty(title)) {
dialog.setTitle(title);
}
if (!TextUtils.isEmpty(message)) {
dialog.setMessage(message);
}
dialog.setActions(strings);
dialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
dialog.setCancelText("取消");
dialog.setEventListener(new ActionDialog.OnEventListener() {
@Override
public void onActionItemClick(ActionDialog dialog, ActionDialog.ActionItem item, int position) {
if (onActionDialogListener != null) {
onActionDialogListener.onSelect(strings, position);
}
}
@Override
public void onCancelItemClick(ActionDialog dialog) {
if (onActionDialogListener == null) return;
if (onActionDialogListener instanceof OnActionAllDialogListener) {
((OnActionAllDialogListener) onActionDialogListener).onCancel();
}
}
});
dialog.show();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 提示框
*
* @param content 内容
* @param onConfirmClickListener 需要实现接口{@link OnConfirmClickListener}
*/
public static Dialog showAlertDialog(Context context, String content,String sureText, DialogUtil.OnConfirmClickListener onConfirmClickListener) {
return showDialog(context, 0, "", content,sureText, "", onConfirmClickListener);
}
}
R.style.ConfirmDialogStyle:
<!-- 确定框样式-->
<style name="ConfirmDialogStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.6</item>
</style>
<!-- <color name="transparent">#00000000</color> ->