Dialog 使用详解

摘要:
简单对话框多选项按钮对话框单选按钮对话框列表对话框水平进度条对话框圆形进度条对话框自定义图像和文本对话框自定义输入对话框自定义样式对话框自定义加载样式对话框继承DialogFragment以实现活动30形式的对话框倒计时要实现Dialog是常用的Android控件。

Dialog 使用详解第1张

极力推荐文章:欢迎收藏
Android 干货分享

Dialog 使用详解第2张

阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

  1. 简单对话框
  2. 多选按钮对话框
  3. 单选按钮对话框
  4. 列表对话框
  5. 水平进度条对话框
  6. 圆形进度条对话框
  7. 自定义图文对话框
  8. 自定义输入对话框
  9. 自定义样式对话框
  10. 自定义Loading样式对话框
  11. 继承 DialogFragment 实现对话框
  12. Activity形式的 对话框
  13. 倒计时 30s Dialog实现

DialogAndroid 常用控件之一,主要以弹出框的形式与用户进行交互。对话框是提示用户作出决定或输入额外信息的小窗口。 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件。

Dialog 简介

Dialog 继承关系如下:

java.lang.Object
   ↳	android.app.Dialog

Dialog 基本样式解析

Dialog 基本样式

1.标题

这是可选项,只应在内容区域被详细消息、列表或自定义布局占据时使用。 如需陈述的是一条简单消息或问题(如图 上图中的对话框),则不需要标题。

2.内容区域

它可以显示消息、列表或其他自定义布局。

3.操作按钮

对话框中的操作按钮不应超过三个。

1. 简单对话框
  • 实现效果:

简单对话框

  • 实现代码如下:
	/**
	 * 简单对话框
	 */
	public void SimpleDialog(View view) {

		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setIcon(R.drawable.gril).setTitle("简单对话框")
				.setMessage("设置Dialog 显示的内容")
				.setPositiveButton("OK", new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {

						Toast.makeText(DiaLogMethods.this, "点击了确定按钮",
								Toast.LENGTH_SHORT).show();
					}
				}).setNegativeButton("Cancle", null).create().show();

	}
2. 多选按钮对话框
  • 实现效果:

多选按钮对话框

  • 实现代码:
/**
	 * 多选按钮对话框
	 * */
	public void MultiChoiceDialog(View view) {
		final String font[] = { "小号字体", "中号字体", "大号字体", "超大号字体" };
		final boolean[] MultiChoice = new boolean[] { false, true, false, false };
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("多选对话框")
				.setIcon(R.drawable.ic_launcher)
				.setMultiChoiceItems(font, MultiChoice,
						new DialogInterface.OnMultiChoiceClickListener() {
							@Override
							public void onClick(DialogInterface dialog,
									int which, boolean isChecked) {
								MultiChoice[which] = isChecked;
								String choiceString = "";
								for (int i = 0; i < MultiChoice.length; i++) {
									if (MultiChoice[i]) {
										choiceString = choiceString + font[i]
												+ "  ";
									}
								}

								if (choiceString.equals("")
										|| choiceString.length() == 0) {

									// 都不选的处理方法

									Toast.makeText(DiaLogMethods.this,
											"请选择一个内容", Toast.LENGTH_SHORT)
											.show();
								} else {

									Toast.makeText(DiaLogMethods.this,
											"选择的字体为" + choiceString,
											Toast.LENGTH_SHORT).show();

								}

							}
						}).setPositiveButton("OK", null)
				.setNegativeButton("Cancle", null).create().show();

	}
3.单选按钮对话框
  • 实现效果:

单选按钮对话框

  • 实现代码如下:

	/**
	 * 单选按钮对话框实现
	 **/
	public void SingleChoiceDialog(View view) {
		final String font[] = { "小号字体", "中号字体", "大号字体", "超大号字体" };
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("单选对话框")
				.setIcon(R.drawable.ic_launcher)
				.setSingleChoiceItems(font, 0,
						new DialogInterface.OnClickListener() {
							@Override
							public void onClick(DialogInterface dialog,
									int which) {
								Toast.makeText(DiaLogMethods.this,
										"选择的字体为:" + font[which],
										Toast.LENGTH_SHORT).show();
								dialog.dismiss();
							}
						}).setPositiveButton("OK", null)
				.setNegativeButton("Cancle", null).create().show();

	}
4. 列表对话框
  • 实现效果如下:

列表对话框

  • 实现代码如下:
/**
	 * 列表对话框实现
	 **/
	public void ListItemDialog(View view) {
		final String font[] = { "小号字体", "中号字体", "大号字体", "超大号字体" };
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setIcon(R.drawable.ic_launcher)
				.setTitle(" 列表对话框")
				.setItems(font, new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Toast.makeText(DiaLogMethods.this,
								"选择内容是:" + font[which], Toast.LENGTH_SHORT)
								.show();
					}
				}).setNegativeButton("Cancle", null)
				.setPositiveButton("OK", null).create().show();

	}
5. 水平进度条对话框
  • 实现效果如下:

水平进度条对话框

  • 实现代码如下:

	/**
	 * 水平进度条对话框实现
	 **/
	@SuppressWarnings("deprecation")
	public void HorProgressDialog(View view) {

		final ProgressDialog progressDialog = new ProgressDialog(
				DiaLogMethods.this);
		progressDialog.setTitle("进度对话框");
		progressDialog.setIcon(R.drawable.ic_launcher);
		progressDialog.setMessage("加载中...");
		// 水平进度条显示
		progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		// 圆形进度条显示
		// progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
		progressDialog.setCancelable(true);
		progressDialog.setButton("Cancle",
				new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Toast.makeText(DiaLogMethods.this, "取消进度条对话框",
								Toast.LENGTH_LONG).show();
						progressDialog.cancel();
						count = 0;
					}
				});
		progressDialog.setMax(100);
		progressDialog.show();
		count = 0;
		new Thread() {
			@Override
			public void run() {

				while (count <= 100) {
					progressDialog.setProgress(count++);
					try {
						Thread.sleep(50);
					} catch (InterruptedException e) {
						progressDialog.dismiss();
						e.printStackTrace();
					}

				}
				progressDialog.dismiss();
			}
		}.start();

	}
6. 圆形进度条对话框
  • 实现效果如下:

 圆形进度条对话框

  • 实现代码如下:
/**
	 * 圆形进度条显示
	 **/
	@SuppressWarnings("deprecation")
	public void SpinerProgressDialog(View view) {

		final ProgressDialog progressDialog = new ProgressDialog(
				DiaLogMethods.this);
		progressDialog.setTitle("进度对话框");
		progressDialog.setIcon(R.drawable.ic_launcher);
		progressDialog.setMessage("加载中...");
		// 水平进度条显示
		// progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		// 圆形进度条显示
		progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
		progressDialog.setCancelable(true);
		progressDialog.setButton("确定", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(DiaLogMethods.this, "取消进度条对话框",
						Toast.LENGTH_LONG).show();
				progressDialog.cancel();
				count = 0;
			}
		});
		progressDialog.setMax(100);
		progressDialog.show();
		count = 0;
		new Thread() {
			@Override
			public void run() {

				while (count <= 100) {
					progressDialog.setProgress(count++);
					try {
						Thread.sleep(50);
					} catch (InterruptedException e) {
						progressDialog.dismiss();
						e.printStackTrace();
					}

				}
				progressDialog.dismiss();
			}
		}.start();

	}
注意 :

水平进度条,圆形进度条的区别 如下:

		// 水平进度条显示
		progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		// 圆形进度条显示
		progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
7. 自定义图文对话框
  • 实现效果如下:

自定义图文对话框

  • 实现代码如下:
	/**
	 * 自定义图文对话框实现
	 **/
	public void CustomImgTvDialog(View view) {

		AlertDialog.Builder builder = new AlertDialog.Builder(this);

		View contextview = getLayoutInflater().inflate(
				R.layout.dialog_custom_img_tv, null);
		LinearLayout linearLayout1 = (LinearLayout) findViewById(R.id.linlout1);
		LinearLayout linearLayout2 = (LinearLayout) findViewById(R.id.linlout2);
		ImageView img1 = (ImageView) contextview.findViewById(R.id.img1);
		TextView tv1 = (TextView) contextview.findViewById(R.id.tv1);
		// 这里可以处理一些点击事件

		builder.setIcon(R.drawable.gril).setTitle("自定义对话框")
				.setView(contextview)
				// 或者在这里处理一些事件
				.setPositiveButton("OK", null)
				.setNegativeButton("Cancle", null).create().show();
	}
注意:
  1. 自定义图文对话框的布局如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android: 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal" >

        <ImageView
            android: 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="http://t.zoukankan.com/@drawable/ic_launcher" />

        <TextView
            android: 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="this is a test data" />
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginBottom="2dp"
        android:layout_marginTop="2dp"
        android:background="@android:color/darker_gray" />

    <LinearLayout
        android: 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal" >

        <ImageView
            android: 
            android:layout_width="wrap_content"
            android:layout_height="45dp"
            android:src="http://t.zoukankan.com/@drawable/gril" />

        <TextView
            android: 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="this is a test data" />
    </LinearLayout>

</LinearLayout>
8. 自定义输入对话框
  • 实现效果如下:

自定义输入对话框

  • 实现代码如下:
	/**
	 * 自定义EditText对话框
	 **/
	public void CustomEditTextDialog(View view) {

		AlertDialog.Builder builder = new AlertDialog.Builder(this,
				android.R.style.Theme_Material_Light_Dialog_Alert);
		View Tittleview = getLayoutInflater().inflate(
				R.layout.dialog_custom_layout, null);
		ImageView img2 = (ImageView) Tittleview.findViewById(R.id.img2);
		TextView textView = (TextView) Tittleview.findViewById(R.id.tv2);

		textView.setText("自定义对话框");
		img2.setImageResource(R.drawable.ic_launcher);
		// 自定义tittle
		builder.setCustomTitle(Tittleview);

		View contentView = getLayoutInflater().inflate(
				R.layout.dialog_custom_et, null);
		EditText username = (EditText) contentView.findViewById(R.id.username);
		EditText passworld = (EditText) contentView
				.findViewById(R.id.passworld);

		builder.setView(contentView);
		builder.setPositiveButton("OK", null).setNegativeButton("Cancle", null)
				.create().show();

	}

自定义对话框 布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <ImageView
        android: 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="http://t.zoukankan.com/@drawable/ic_launcher" />

    <TextView
        android: 
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_weight="1"
        android:text="自定义Dialog"
        android:textColor="@android:color/black"
        android:textSize="25sp" />
</LinearLayout>

自定义 EditText 内容布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android: 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="2dp"
        android:background="@drawable/custom_edittext_background"
        android:hint="please input username"
        android:padding="5dp"
        android:textSize="20sp" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginBottom="2dp"
        android:layout_marginTop="2dp"
        android:background="@android:color/darker_gray" />

    <EditText
        android: 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="2dp"
        android:background="@drawable/custom_edittext_background"
        android:hint="please input password"
        android:padding="5dp"
        android:textSize="20sp" />

</LinearLayout>
9. 自定义样式对话框
  • 实现效果如下:

自定义样式对话框

  • 实现代码如下:
	/**
	 * 自定义样式对话框
	 * **/
	public void CustomStyleDialog(View v) {

		// 对话框和activity绑定,所以必须传递activity对象
		Builder builder = new AlertDialog.Builder(this,
				android.R.style.Theme_Material_Light_Dialog_Alert);
		// 获取对话框对象
		final AlertDialog dialog = builder.create();
		// 修改对话框的样式(布局结构)
		View view = View.inflate(this, R.layout.dialog_custom_style, null);

		// 因为在2.3.3版本上,系统默认设置内间距,所以需要去除此内间距
		// dialog.setView(view);
		dialog.setView(view, 0, 0, 0, 0);

		// 找到对话框中所有控件
		Button bt_submit = (Button) view.findViewById(R.id.bt_submit);
		Button bt_cancel = (Button) view.findViewById(R.id.bt_cancel);

		final EditText et_set_psd = (EditText) view
				.findViewById(R.id.et_set_psd);
		final EditText et_confirm_psd = (EditText) view
				.findViewById(R.id.et_confirm_psd);

		bt_submit.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 如果用户没有输入两次密码,告知用户输入密码
				String psd = et_set_psd.getText().toString().trim();
				String confirmPsd = et_confirm_psd.getText().toString().trim();
				if (!TextUtils.isEmpty(psd) && !TextUtils.isEmpty(confirmPsd)) {
					if (psd.equals(confirmPsd)) {
						// 当前的对话框隐藏
						dialog.dismiss();

					} else {
						Toast.makeText(getApplicationContext(), "两次输入密码不一致",
								Toast.LENGTH_SHORT).show();
					}
				} else {
					Toast.makeText(getApplicationContext(), "密码不能为空",
							Toast.LENGTH_SHORT).show();
				}
			}
		});

		bt_cancel.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				dialog.dismiss();
			}
		});

		// 展示对话框
		dialog.show();

	}

1. 自定义样式dialog_custom_style布局如下:

dialog_custom_style 布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_blue_light"
        android:gravity="center"
        android:textColor="@android:color/white"
        android:layout_marginBottom="10dp"
        android:padding="10dp"
        android:text="设置密码"
        android:textSize="20sp" />

    <EditText
        android: 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="2dp"
        android:background="@drawable/custom_edittext_background"
        android:hint="输入密码"
        android:inputType="textPassword"
        android:padding="5dp"
        android:textSize="22sp" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginBottom="2dp"
        android:layout_marginTop="2dp"
        android:background="@drawable/tittle_bg" />

    <EditText
        android: 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="2dp"
        android:background="@drawable/custom_edittext_background"
        android:hint="确认密码"
        android:inputType="textPassword"
        android:padding="5dp"
        android:textSize="22sp" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginTop="5dp"
        android:background="@drawable/tittle_bg" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="3dp"
        android:layout_marginTop="3dp"
        android:orientation="horizontal" >

        <Button
            android: 
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:background="@drawable/custom_btn_green_selector"
            android:text="确认" >
        </Button>

        <Button
            android: 
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:background="@drawable/custom_btn_green_selector"
            android:text="取消" >
        </Button>
    </LinearLayout>

</LinearLayout>

2. EditText 的背景是画的edittext_background 圆角矩形

edittext_background 实现

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <!-- 圆角-->
    <corners android:radius="5dp" />
    <!--描边-->
    <stroke
        android: 
        android:color="@android:color/holo_blue_light" />

</shape>

android.R.style.Theme_Material_Light_Dialog_Alert 是用来定义Dialog 样式。

		Builder builder = new AlertDialog.Builder(this,
				android.R.style.Theme_Material_Light_Dialog_Alert);
10. 自定义Loading样式对话框
  • 实现效果如下:

自定义Loading样式对话框

  • 实现代码如下:
	/**
	 * 自定义Loading样式对话框
	 ***/
	public void CustomStyleProgressDialog(View view) {

		LayoutInflater inflater = LayoutInflater.from(this);
		View v = inflater.inflate(R.layout.dialog_custom_style_progress, null);
		LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);

		ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img);
		TextView tipTextView = (TextView) v.findViewById(R.id.tipTextView);

		Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this,
				R.anim.loading_animation);

		spaceshipImage.startAnimation(hyperspaceJumpAnimation);

		Dialog loadingDialog = new Dialog(this, R.style.loading_dialog);

		// loadingDialog.setCancelable(true);//“返回键”取消 不可以用
		loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(
				LinearLayout.LayoutParams.MATCH_PARENT,
				LinearLayout.LayoutParams.MATCH_PARENT));
		loadingDialog.show();
	}

1. 自定义Dialog Sstyle 如下:


    <!-- 自定义loading dialog样式 -->
    <style name="loading_dialog" parent="android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@drawable/loading_bg</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>

2. 自定义Dialog 样式动画如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <!-- 自定义旋转的动画 -->
    <rotate
        android:duration="800"
        android:fromDegrees="0"
        android:interpolator="@android:anim/linear_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="-1"
        android:repeatMode="restart"
        android:startOffset="-1"
        android:toDegrees="+360" />

</set>

3. 自定义样式的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android: 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/loading_bg"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android: 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="20dp"
        android:gravity="center_horizontal"
        android:src="http://t.zoukankan.com/@drawable/loading" />

    <TextView
        android: 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="20dp"
        android:layout_marginTop="10dp"
        android:gravity="center_horizontal"
        android:text="loading..."
        android:textColor="@android:color/holo_green_light"
        android:textSize="20sp" />

</LinearLayout>
11. 继承 DialogFragment 实现对话框
  • 实现效果如下:

继承 DialogFragment 实现对话框

1.自定义继承DialogFragment 类

  • 实现代码如下:

自定义继承DialogFragment 类

public class CustomDialogFragment extends DialogFragment {

	@Override
	public Dialog onCreateDialog(Bundle savedInstanceState) {
		// Use the Builder class for convenient dialog construction
		AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
		builder.setMessage("通过 DialogFragment 创建对话框")
				.setTitle("DialogFragment")
				.setPositiveButton("OK", new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {
						Toast.makeText(getActivity(), "点击 OK",
								Toast.LENGTH_SHORT).show();
					}
				})
				.setNegativeButton("cancle",
						new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int id) {
								// User cancelled the dialog
							}
						});
		// Create the AlertDialog object and return it
		return builder.create();
	}
}

2. Activity 调用显示Dialog方法

	/**
	 * 继承 DialogFragment 实现对话框
	 * **/
	public void CustomFragmentDialog(View view) {

		CustomDialogFragment customDialogFragment = new CustomDialogFragment();
		customDialogFragment.show(getFragmentManager(), "fragment");
	}
12. Activity形式的 对话框

只需创建一个 Activity,并在<activity>清单文件元素中将其主题设置为 Theme.Holo.Dialog样式即可

<activity android:theme="@android:style/Theme.Holo.Dialog" >
13.倒计时 30s Dialog实现

实现效果如下:

倒计时关机实现

实现代码如下:

	private TextView mShutDownTextView;
	private Handler mOffHandler;
	private Timer mShutdownTime;
	private Dialog mDialog;

	public void CountDownDialog(View view) {

		CreateShutDownDialog();

	}

	private Handler mNumHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			if (msg.what > 0) {

				// //动态显示倒计时
				mShutDownTextView
						.setText("Warning! Battery temperature°С, phone will shutdown in "
								+ msg.what + "s");

			} else {
				if (mDialog != null) {
					mDialog.dismiss();
				}
				mShutdownTime.cancel();
				Toast.makeText(getApplicationContext(), "倒计时结束", 0).show();

			}
		}

	};

	private void CreateShutDownDialog() {

		mShutDownTextView = new TextView(this);
		mShutDownTextView.setLineSpacing(1.2f, 1.2f);
		mShutDownTextView.setText("");
		mShutDownTextView.setPadding(20, 20, 20, 20);
		mDialog = new AlertDialog.Builder(this).setTitle("Safety Warning")
				.setCancelable(false).setView(mShutDownTextView)
				.setPositiveButton("OK", new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {
						mShutdownTime.cancel();

					}
				}).create();
		mDialog.show();
		mDialog.setCanceledOnTouchOutside(false);
		mShutdownTime = new Timer(true);
		TimerTask timeTask = new TimerTask() {
			int countTime = 30;

			public void run() {
				if (countTime > 0) {
					countTime--;
				}
				Message msg = new Message();
				msg.what = countTime;
				mNumHandler.sendMessage(msg);
			}
		};
		mShutdownTime.schedule(timeTask, 1000, 1000);
	}

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

微信关注公众号: 程序员Android,领福利

免责声明:文章转载自《Dialog 使用详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GDB调试方法CVS 用法总结(zz)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用CSplitterWnd分割窗口

使用CSplitterWnd分割窗口 一、基本的CSplitterWnd的使用 1. 在CMainFrame中添加一个CSplitterWnd成员:CSplitterWnd m_splitterwnd1; 2.基于CView创建两个新的视图类,CViewLeft和CViewRight,一个用于在左边显示,一个用于在右边显示。 3.重载CMainFrame...

swing界面刷新问题

在Java Swing编程中,往往会遇到需要动态刷新界面的时候,例如动态刷新JLabel的文本,JTextField里的文本等等。但是往往却没有达到我们预期的效果,我相信很多朋友都遇到过本文将要说的这个问题。 如下图的Swing界面中,我们期望在点击按钮时,Jlabel和JTextField里的文本能不断的变化,并实时地显示出来。 这个例子中,我们期望点...

CButtonEx的实现

要想修改CButton类按钮背景颜色和文字颜色,必须利用自绘方法对按钮进行重新绘制。这可以通过定义一个以CButton为基类的新按钮类来实现。以下为具体的实现方法: 方法一: 加入一个新类,类名:CButtonEx,基类:CButton。 在头文件 CButtonEx.h 中加入以下变量和函数定义: private: intm_Style; //按钮形状(...

Vue指令和事件

/** * 语法糖的概念: * 语法糖是指在不影响功能的情况下,添加某种方法实现同样的; * 使用语法糖,可以简化代码的书写 * 比如 v-on:click='func' @click='func' * v-bind:src :src */ <!-- v-on 可以监听原生DOM事件click,dbclick,keyup,mousemove...

Unity3d—GUI按钮控件

这是自己的第一篇记录自己的技术文章,自己还是个菜鸟,有错误之处还望大家能够多多指点。1、在project视图中创建C#脚本,我命名为 Gui_test 2、然后打开该脚本,输入以下代码:1 usingSystem.Collections; 2 usingSystem.Collections.Generic; 3 usingUnityEngine; 4...

设计模式之命令模式-JS

理解命令模式 假设有一个快餐店,而我是该餐厅的点餐服务员,那么我一天的工作应该是这样的:当某位客人点餐或者打来订餐电话后,我会把他的需求都写在清单上,然后交给厨房,客人不用关心是哪些厨师帮他炒菜。我们餐厅还可以满足客人需要的定时服务,比如客人可能当前正在回家的路上,要求1个小时后才开始炒他的菜,只要订单还在,厨师就不会忘记。客人也可以很方便地打电话来撤销订...