- 论坛徽章:
- 0
|
Android40_Dialog
Dialog是Android常用的对话框控件。AlertDialog对话框是Dialog的子类,它提供一个图标,一个标题,一个文本和3个按钮。以前用过的DatePickerDialog和TimePickerDialog是Dialog的间接子类。ProgressDialog是AlertDialog类的一个扩展,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条。
一、AlertDialog使用方法
1.创建对话框
setIcon:创建图标;setTitle:设置标题;setMessage:设置内容;setPositiveButton:响应Yes/Ok的点击,setNeutralButton:响应中立行为的点击,setNegativeButton:响应No/Cancel的点击。都需要传进去一个OnClickListener的对象。
Java代码- 1.dialog = new AlertDialog.Builder(this)
- 2. .setIcon(android.R.drawable.btn_star).setTitle("这是一个警告对话框")
- 3. .setMessage("确定要退出吗?")
- 4. .setPositiveButton("是", dbl)
- 5. .setNegativeButton("否", dbl)
- 6. .setNeutralButton("取消", dbl).create();
- dialog = new AlertDialog.Builder(this)
- .setIcon(android.R.drawable.btn_star).setTitle("这是一个警告对话框")
- .setMessage("确定要退出吗?")
- .setPositiveButton("是", dbl)
- .setNegativeButton("否", dbl)
- .setNeutralButton("取消", dbl).create();
复制代码 2.准备显示对话框,这是一个可选的回调函数。 如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。这个方法在每次打开对话框时被调用,而onCreateDialog(int) 仅在对话框第一次打开时被调用。如果你不定义onPrepareDialog(),那么这个对话框将保持和上次打开时一样。这个方法也被传递以对话框的ID,和在onCreateDialog()中创建的对话框对象。即对话框对象每次运行之后创建一次,不会每次调用都创建,所以只能在onPrepareDialog中更改。
Java代码- 1.// 每次显示对话框之前会被调用
- 2.@Override
- 3.public void onPrepareDialog(int id, Dialog dialog){
- 4. Toast.makeText(this, "onPrepareDialog方法被调用",
- 5. Toast.LENGTH_LONG).show();
- 6.super.onPrepareDialog(id, dialog);
- 7.}
- // 每次显示对话框之前会被调用
- @Override
- public void onPrepareDialog(int id, Dialog dialog){
- Toast.makeText(this, "onPrepareDialog方法被调用",
- Toast.LENGTH_LONG).show();
- super.onPrepareDialog(id, dialog);
- }
复制代码 3. 添加对话框中按钮点击事件的监听器,点击取消按钮Dialog.BUTTON_NEUTRAL不会调用OnCancelListener
Java代码- 1.// 对话框按钮点击事件监听器
- 2.class DialogButtonListener implements DialogInterface.OnClickListener{
- 3. public void onClick(DialogInterface dialog, int which) {
- 4. switch (which) {
- 5. case Dialog.BUTTON_NEGATIVE:
- 6. Toast.makeText(AlertDialogActivity.this, "不退出",
- 7. Toast.LENGTH_LONG).show();
- 8. break;
- 9. case Dialog.BUTTON_NEUTRAL:
- 10. Toast.makeText(AlertDialogActivity.this, "取消",
- 11. Toast.LENGTH_LONG).show();
- 12. break;
- 13. case Dialog.BUTTON_POSITIVE:
- 14. Toast.makeText(AlertDialogActivity.this, "退出",
- 15. Toast.LENGTH_LONG).show();
- 16. break;
- 17. }
- 18. }
- 19.}
- // 对话框按钮点击事件监听器
- class DialogButtonListener implements DialogInterface.OnClickListener{
- public void onClick(DialogInterface dialog, int which) {
- switch (which) {
- case Dialog.BUTTON_NEGATIVE:
- Toast.makeText(AlertDialogActivity.this, "不退出",
- Toast.LENGTH_LONG).show();
- break;
- case Dialog.BUTTON_NEUTRAL:
- Toast.makeText(AlertDialogActivity.this, "取消",
- Toast.LENGTH_LONG).show();
- break;
- case Dialog.BUTTON_POSITIVE:
- Toast.makeText(AlertDialogActivity.this, "退出",
- Toast.LENGTH_LONG).show();
- break;
- }
- }
- }
复制代码 4.显示对话框
Java代码- 1.showDialog(DIALOG_ID);
- showDialog(DIALOG_ID);
复制代码 同样也可以消除对话框和移除对话框,移除对话框会同时调用注册的OnCancelListener,即删除对话框对象,而消除对话框则不会删除dialog对象,下次调用的时候还是这个对象:
Java代码- 1.//消除对话框
- 2.dismissDialog(DIALOG_ID);
- 3.//移除对话框
- 4.removeDialog(DIALOG_ID);
- //消除对话框
- dismissDialog(DIALOG_ID);
- //移除对话框
- removeDialog(DIALOG_ID);
复制代码 完整代码:
main.xml
Xml代码- 1.<?xml version="1.0" encoding="utf-8"?>
- 2.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- 3. android:orientation="vertical"
- 4. android:layout_width="fill_parent"
- 5. android:layout_height="fill_parent"
- 6. >
- 7.<Button
- 8. android:id="@+id/showdialog"
- 9. android:layout_width="wrap_content"
- 10. android:layout_height="wrap_content"
- 11. android:text="弹出对话框"
- 12./>
- 13.<Button
- 14. android:id="@+id/deletedialog"
- 15. android:layout_width="wrap_content"
- 16. android:layout_height="wrap_content"
- 17. android:text="关闭对话框"
- 18./>
- 19.<Button
- 20. android:id="@+id/removedialog"
- 21. android:layout_width="wrap_content"
- 22. android:layout_height="wrap_content"
- 23. android:text="移除对话框"
- 24./>
- 25.</LinearLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <Button
- android:id="@+id/showdialog"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="弹出对话框"
- />
- <Button
- android:id="@+id/deletedialog"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="关闭对话框"
- />
- <Button
- android:id="@+id/removedialog"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="移除对话框"
- />
- </LinearLayout>
- AlertDialogActivity.java
复制代码 Java代码- 1.package com.android.activity;
- 2.import android.app.Activity;
- 3.import android.app.AlertDialog;
- 4.import android.app.Dialog;
- 5.import android.content.DialogInterface;
- 6.import android.os.Bundle;
- 7.import android.view.View;
- 8.import android.view.View.OnClickListener;
- 9.import android.widget.Button;
- 10.import android.widget.Toast;
- 11.public class AlertDialogActivity extends Activity {
- 12. private Button showDialog = null;
- 13. private Button deleteDialog = null;
- 14. private Button removeDialog = null;
- 15. private Dialog dialog = null;
- 16. DialogButtonListener dbl = null;
- 17. private static final int DIALOG_ID = 1;
- 18. @Override
- 19. public void onCreate(Bundle savedInstanceState) {
- 20. super.onCreate(savedInstanceState);
- 21. setContentView(R.layout.main);
- 22. showDialog = (Button)findViewById(R.id.showdialog);
- 23. deleteDialog = (Button)findViewById(R.id.deletedialog);
- 24. removeDialog = (Button)findViewById(R.id.removedialog);
- 25. dbl = new DialogButtonListener();
- 26. showDialog.setOnClickListener(new ShowButtonListener());
- 27. deleteDialog.setOnClickListener(new DeleteButtonListener());
- 28. removeDialog.setOnClickListener(new RemoveButtonListener());
- 29. }
- 30. // 创建会话框时调用
- 31. @Override
- 32. public Dialog onCreateDialog(int id) {
- 33. Toast.makeText(this, "onCreateDialog方法被调用",
- 34. Toast.LENGTH_LONG).show();
- 35. dialog = new AlertDialog.Builder(this)
- 36. .setIcon(android.R.drawable.btn_star)
- 37. .setTitle("这是一个警告对话框!")
- 38. .setMessage("确定要退出吗?")
- 39. .setPositiveButton("是", dbl)
- 40. .setNegativeButton("否", dbl)
- 41. .setNeutralButton("取消", dbl).create();
- 42. return dialog;
- 43. }
- 44. // 每次显示对话框之前会被调用
- 45. @Override
- 46. public void onPrepareDialog(int id, Dialog dialog){
- 47. Toast.makeText(this, "onPrepareDialog方法被调用",
- 48. Toast.LENGTH_LONG).show();
- 49. super.onPrepareDialog(id, dialog);
- 50. }
- 51. // 对话框按钮点击事件监听器
- 52. class DialogButtonListener implements DialogInterface.OnClickListener{
- 53. public void onClick(DialogInterface dialog, int which) {
- 54. switch (which) {
- 55. case Dialog.BUTTON_NEGATIVE:
- 56. Toast.makeText(AlertDialogActivity.this,
- 57. "不退出",Toast.LENGTH_LONG).show();
- 58. break;
- 59. case Dialog.BUTTON_NEUTRAL:
- 60. Toast.makeText(AlertDialogActivity.this,
- 61. "取消",Toast.LENGTH_LONG).show();
- 62. break;
- 63. case Dialog.BUTTON_POSITIVE:
- 64. Toast.makeText(AlertDialogActivity.this,
- 65. "退出",Toast.LENGTH_LONG).show();
- 66. break;
- 67. }
- 68. }
- 69. }
- 70. //弹出对话框按钮监听器
- 71. class ShowButtonListener implements OnClickListener{
- 72. public void onClick(View v) {
- 73. //显示对话框
- 74. showDialog(DIALOG_ID);
- 75. }
- 76. }
- 77. //关闭对话框按钮监听器
- 78. class DeleteButtonListener implements OnClickListener{
- 79. public void onClick(View v) {
- 80. //关闭对话框
- 81. dismissDialog(DIALOG_ID);
- 82. }
- 83. }
- 84. //移除对话框按钮监听器
- 85. class RemoveButtonListener implements OnClickListener{
- 86. public void onClick(View v) {
- 87. //移除对话框 ,会同时调用注册的OnCancelListener()
- 88. removeDialog(DIALOG_ID);
- 89. }
- 90. }
- 91.}
- package com.android.activity;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.app.Dialog;
- import android.content.DialogInterface;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.Toast;
- public class AlertDialogActivity extends Activity {
- private Button showDialog = null;
- private Button deleteDialog = null;
- private Button removeDialog = null;
- private Dialog dialog = null;
- DialogButtonListener dbl = null;
- private static final int DIALOG_ID = 1;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- showDialog = (Button)findViewById(R.id.showdialog);
- deleteDialog = (Button)findViewById(R.id.deletedialog);
- removeDialog = (Button)findViewById(R.id.removedialog);
- dbl = new DialogButtonListener();
- showDialog.setOnClickListener(new ShowButtonListener());
- deleteDialog.setOnClickListener(new DeleteButtonListener());
- removeDialog.setOnClickListener(new RemoveButtonListener());
- }
- // 创建会话框时调用
- @Override
- public Dialog onCreateDialog(int id) {
- Toast.makeText(this, "onCreateDialog方法被调用",
- Toast.LENGTH_LONG).show();
- dialog = new AlertDialog.Builder(this)
- .setIcon(android.R.drawable.btn_star)
- .setTitle("这是一个警告对话框!")
- .setMessage("确定要退出吗?")
- .setPositiveButton("是", dbl)
- .setNegativeButton("否", dbl)
- .setNeutralButton("取消", dbl).create();
- return dialog;
- }
- // 每次显示对话框之前会被调用
- @Override
- public void onPrepareDialog(int id, Dialog dialog){
- Toast.makeText(this, "onPrepareDialog方法被调用",
- Toast.LENGTH_LONG).show();
- super.onPrepareDialog(id, dialog);
- }
- // 对话框按钮点击事件监听器
- class DialogButtonListener implements DialogInterface.OnClickListener{
- public void onClick(DialogInterface dialog, int which) {
- switch (which) {
- case Dialog.BUTTON_NEGATIVE:
- Toast.makeText(AlertDialogActivity.this,
- "不退出",Toast.LENGTH_LONG).show();
- break;
- case Dialog.BUTTON_NEUTRAL:
- Toast.makeText(AlertDialogActivity.this,
- "取消",Toast.LENGTH_LONG).show();
- break;
- case Dialog.BUTTON_POSITIVE:
- Toast.makeText(AlertDialogActivity.this,
- "退出",Toast.LENGTH_LONG).show();
- break;
- }
- }
- }
- //弹出对话框按钮监听器
- class ShowButtonListener implements OnClickListener{
- public void onClick(View v) {
- //显示对话框
- showDialog(DIALOG_ID);
- }
- }
- //关闭对话框按钮监听器
- class DeleteButtonListener implements OnClickListener{
- public void onClick(View v) {
- //关闭对话框
- dismissDialog(DIALOG_ID);
- }
- }
- //移除对话框按钮监听器
- class RemoveButtonListener implements OnClickListener{
- public void onClick(View v) {
- //移除对话框 ,会同时调用注册的OnCancelListener()
- removeDialog(DIALOG_ID);
- }
- }
- }
复制代码 运行结果:
二、ProgressDialog使用方法
Main.xml
Xml代码- 1.<?xml version="1.0" encoding="utf-8"?>
- 2.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- 3. android:orientation="vertical"
- 4. android:layout_width="fill_parent"
- 5. android:layout_height="fill_parent"
- 6. >
- 7.<TextView
- 8. android:layout_width="fill_parent"
- 9. android:layout_height="wrap_content"
- 10. android:text="@string/hello"
- 11. />
- 12.<Button android:text="圆形进度对话框"
- 13. android:id="@+id/spinnerprogress"
- 14. android:layout_width="wrap_content"
- 15. android:layout_height="wrap_content"/>
- 16.<Button android:text="长方形进度对话框"
- 17. android:id="@+id/horizonalprogress"
- 18. android:layout_width="wrap_content"
- 19. android:layout_height="wrap_content"/>
- 20.</LinearLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- <Button android:text="圆形进度对话框"
- android:id="@+id/spinnerprogress"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- <Button android:text="长方形进度对话框"
- android:id="@+id/horizonalprogress"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- </LinearLayout> ProgressDialogActivity.java
复制代码 |
|