自定义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; } } }
相关文章推荐
- java 自定义确认取消的Dialog对话框,10秒之后自动关闭
- NoAds 2006.07.28(可以自动关闭网页浏览时弹出的广告小视窗)zkacb汉化版
- 创建可以定时自动关闭的对话框
- winform 关于Messagebox自动定时关闭和自定义提示框总按钮上文本的问题的整理
- Activity使用Dialog样式导致点击空白处自动关闭的问题
- android自定义dialog中点击listview的item事件关闭dialog
- windowform下 richTextBox+openFileDialog+saveFileDialog的使用方法 + 控件不获取焦点时自动关闭
- Activity使用Dialog样式导致点击空白处自动关闭的问题
- TSaveDialog怎么不自动关闭
- android dialog自动关闭
- Activity使用Dialog样式导致点击空白处自动关闭的问题
- 右下角弹出信息,可以设置为自动关闭
- JQuery 可自定义自动播放图片 文字 也可以带按钮点击特效
- 点击对象弹出DIV层菜单可以定时自动关闭
- window.open,自动打开新窗口并且自动关闭新窗口,可以作为增加点击率使用
- 一个简单的可以运行程序之后自动关闭的批处理命令
- 为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
- 自定义一个可以自动循环显示图片的Demo
- Activity使用Dialog样式导致点击空白处自动关闭的问题
- WinForm中使MessageBox实现可以自动关闭功能