您的位置:首页 > 其它

自定义dialog 可以读秒自动关闭

2016-12-12 16:49 323 查看
随便写了个自定义dialog 可以读秒自动关闭 看一下就知道了 很简单



/**
* Created by miao on 2016/12/6.
* 所有的上下文对象必须以activity.this这种传入  否则找不到依赖的窗体
*/
public class CustomAlertDialog extends AlertDialog {

private static CustomAlertDialog mCustomAlertDialog;
private static TextView mDialogContent;
private static TextView mDialogTitle;
private static TextView mCancelBtn;
private static Timer mTimer;
private static TimerTask mTimerTask;
private static TextView mDialogUnit;
private static TextView mDialogTimer;
private static LinearLayout mLayout;
private int count = 3;//读秒出实际开始为2-0

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

public CustomAlertDialog(Context context, int theme) {
super(context, theme);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = LayoutInflater.from(getContext());
// 得到加载view
View v = inflater.inflate(R.layout.custom_alertdialog, null);
// 加载布局
mLayout = (LinearLayout) v.findViewById(R.id.ll_alert_dialog_match);
mDialogTitle = (TextView) v.findViewById(R.id.dialog_title);
mDialogContent = (TextView) v.findViewById(R.id.dialog_content);
mDialogTimer = (TextView) v.findViewById(R.id.tv_timetrask);
mDialogUnit = (TextView) v.findViewById(R.id.tv_unit);
mCancelBtn = (TextView) v.findViewById(R.id.btn_cancel);

//设置dialog圆角
getWindow().setBackgroundDrawable(new BitmapDrawable());

setContentView(mLayout, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
//读秒设置
dialogCountdown();
}

/**
* 有按钮 不显示时长 点击按钮关闭 并处理其他逻辑 外部点击是否可以关闭
* 显示自定义dialog
*  @param context
* @param title
* @param msg
* @param isAllowOutsideClick
*/
public static void showDialog(Context context, String title, String msg, String btn_name,
final OnDialogListener onDialogListener, boolean isAllowOutsideClick) {
//创建自定义dialog
mCustomAlertDialog = new CustomAlertDialog(context, R.style.dialogBoxTheme);
mCustomAlertDialog.setCancelable(false);// 不可以用“返回键”取消
mCustomAlertDialog.show();
//判断是否需要按钮
mCancelBtn.setVisibility(View.INVISIBLE);
//是否设置外部点击
if (isAllowOutsideClick){
mLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
closeDialogAndTimer();
}
});
}
mDialogTitle.setText(title);
mDialogContent.setText(msg);
mCancelBtn.setText(btn_name);
mCancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
closeDialogAndTimer();
if (onDialogListener != null) {
onDialogListener.outSideExtraClick();
}
}
});
}
/**
* 有按钮 不显示时长 点击按钮关闭 不处理其他逻辑
* 显示自定义dialog
*
* @param context
* @param title
* @param msg
*/
public static void showDialog(Context context, String title, String msg, String btn_name) {
//创建自定义dialog
mCustomAlertDialog = new CustomAlertDialog(context, R.style.dialogBoxTheme);
mCustomAlertDialog.setCancelable(false);// 不可以用“返回键”取消
mCustomAlertDialog.show();
//判断是否需要按钮
if (StringUtils.isEmpty(btn_name)) {
mCancelBtn.setVisibility(View.INVISIBLE);
mLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
closeDialogAndTimer();
}
});
}
mDialogTitle.setText(title);
mDialogContent.setText(msg);
mCancelBtn.setText(btn_name);
mCancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
closeDialogAndTimer();
}
});
}

/**
* 无按钮显示时长
*
* @param context 上下文
* @param title   标题
* @param msg     内容
* @param second  显示时长
*/
public static void showDialog(Context context, String title, String msg, long second) {
//创建自定义dialog
mCustomAlertDialog = new CustomAlertDialog(context, R.style.dialogBoxTheme);
mCustomAlertDialog.setCancelable(false);// 不可以用“返回键”取消
mCustomAlertDialog.show();
mDialogUnit.setVisibility(View.VISIBLE);
mDialogTimer.setVisibility(View.VISIBLE);
//开始一个读秒定时任务
mTimer.schedule(mTimerTask, 0, second);
mDialogTitle.setText(title);
mDialogContent.setText(msg);
}

/**
* 关闭dialog和定时器
*/
private static void closeDialogAndTimer() {
mCustomAlertDialog.dismiss();
mTimerTask.cancel();
mTimer.cancel();
mTimer = null;
}

/**
* 定义mCancelBtn的点击事件
*/
public interface OnDialogListener {
void outSideExtraClick();
}

/**
* 提示框的读秒方法
*/
private void dialogCountdown() {
mTimer = new Timer();
mTimerTask = new TimerTask() {
@Override
public void run() {
if (count <= 0) {
UIUtils.runInMainThread(new Runnable() {
@Override
public void run() {
closeDialogAndTimer();
}
});
}

UIUtils.runInMainThread(new Runnable() {
@Override
public void run() {
mDialogTimer.setText("" + count);
}
});
count--;
}
};
}

/**
* 手动关闭方法
* 关闭diaolog
*/
public static void closeDialog() {
if (mCustomAlertDialog != null && mCustomAlertDialog.isShowing()) {
mCustomAlertDialog.dismiss();
mCustomAlertDialog = null;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dialog-读秒