这篇我们来总结一下对话框 Dialog ,在我们做 Web 程序的时候想必大家都应该知道,对话框有的时候可以有效的给用户一个提示。废话少说,直接上代码:
1、 简单警告框
package com.iflytek.demo; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.os.Bundle; public class SimpleDialogActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); Dialog dialog = new AlertDialog.Builder(this).setTitle("对话框标题") // 创建标题 .setMessage("显示提示信息内容") // 表示对话框中的内容 .setIcon(R.drawable.ic_launcher) // 设置LOGO .create(); // 创建了一个对话框 dialog.show(); // 显示对话框 } }
2、 多种操作按钮
package com.iflytek.demo; 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; public class DialogDemoActivity extends Activity { private Button mybut = null; // 定义按钮 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.mybut = (Button) super.findViewById(R.id.mybut); // 取得按钮 this.mybut.setOnClickListener(new OnClickListenerImpl()); // 设置事件类 } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { Dialog dialog = new AlertDialog.Builder(DialogDemoActivity.this) .setTitle("确定删除?") // 创建标题 .setMessage("您确定要删除该条信息吗?") // 表示对话框中的内容 .setIcon(R.drawable.ic_launcher) // 设置LOGO .setPositiveButton("删除", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setNeutralButton("查看详情", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).create(); // 创建了一个对话框 dialog.show(); // 显示对话框 } } }
3、退出按钮
package com.iflytek.demo; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageButton; public class DialogDemoActivity extends Activity { private ImageButton but = null; // 定义按钮 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.but = (ImageButton) super.findViewById(R.id.but); // 取得按钮 this.but.setOnClickListener(new OnClickListenerImpl()); // 设置事件类 } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { DialogDemoActivity.this.exitDialog(); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // 返回键 this.exitDialog(); } return false; } private void exitDialog() { Dialog dialog = new AlertDialog.Builder(DialogDemoActivity.this) .setTitle("程序退出?") // 创建标题 .setMessage("您确定要退出本程序吗?") // 表示对话框中的内容 .setIcon(R.drawable.ic_launcher) // 设置LOGO .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DialogDemoActivity.this.finish(); // 操作结束 } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).create(); // 创建了一个对话框 dialog.show(); // 显示对话框 } }
4、列表对话框
package com.iflytek.demo; 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.TextView; public class DialogDemoActivity extends Activity { private Button mybut = null; // 定义按钮 private TextView mych = null; // 定义文本 private String fruitData[] = new String[] { "苹果", "西瓜", "橘子" }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.mybut = (Button) super.findViewById(R.id.mybut); // 取得按钮 this.mych = (TextView) super.findViewById(R.id.mych); // 取得文本 this.mybut.setOnClickListener(new OnClickListenerImpl()); // 设置事件类 } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { Dialog dialog = new AlertDialog.Builder(DialogDemoActivity.this) .setIcon(R.drawable.ic_launcher) .setTitle("请选择你喜欢吃的水果?") .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setItems(DialogDemoActivity.this.fruitData, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DialogDemoActivity.this.mych .setText("您选择的水果是:" + DialogDemoActivity.this.fruitData[which]); } }).create(); dialog.show(); } } }
5 、列表对话框(资源文件配置选项)
res/values/fruit_data.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="fruit_labels"> <item>苹果</item> <item>西瓜</item> <item>橘子</item> </string-array> </resources>
Activity
package com.iflytek.demo; 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.TextView; public class DialogDemoActivity extends Activity { private Button mybut = null ; // 定义按钮 private TextView mych = null ; // 定义文本 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.mybut = (Button) super.findViewById(R.id.mybut) ; // 取得按钮 this.mych = (TextView) super.findViewById(R.id.mych) ; // 取得文本 this.mybut.setOnClickListener(new OnClickListenerImpl()) ; // 设置事件类 } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { Dialog dialog = new AlertDialog.Builder(DialogDemoActivity.this) .setIcon(R.drawable.ic_launcher) .setTitle("请选择你喜欢吃的水果?") .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).setItems(R.array.fruit_labels, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DialogDemoActivity.this.mych .setText("您选择的水果是:" + DialogDemoActivity.this .getResources() .getStringArray( R.array.fruit_labels)[which]); } }).create() ; dialog.show() ; } } }
6 、单选对话框
package com.iflytek.demo; 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.TextView; public class DialogDemoActivity extends Activity { private Button mybut = null; // 定义按钮 private TextView mych = null; // 定义文本 private TextView mytext = null; // 定义文本 private String fruitData[] = new String[] { "苹果", "西瓜", "水蜜桃" }; private String fruitDesc[] = new String[] { "苹果,植物类水果,多次花果,具有丰富的营养成分,有食疗、辅助治疗等功能。", "西瓜(学名:Citrullus Lanatus,英文:Watermelon),属葫芦科,原产于非洲。", "水蜜桃,在植物分类学上属于蔷薇科,梅属,桃亚属,为落叶小乔木。" }; private int chNum = 0; // 保存选项 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.mybut = (Button) super.findViewById(R.id.mybut); // 取得按钮 this.mych = (TextView) super.findViewById(R.id.mych); // 取得文本 this.mytext = (TextView) super.findViewById(R.id.mytext); // 取得文本 this.mybut.setOnClickListener(new OnClickListenerImpl()); // 设置事件类 } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { Dialog dialog = new AlertDialog.Builder(DialogDemoActivity.this) .setIcon(R.drawable.ic_launcher) .setTitle("请选择你喜欢吃的水果?") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DialogDemoActivity.this.mych .setText(DialogDemoActivity.this.fruitData[DialogDemoActivity.this.chNum]); // 设置选项的名称 } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setSingleChoiceItems(DialogDemoActivity.this.fruitData, 0, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DialogDemoActivity.this.mytext .setText(DialogDemoActivity.this.fruitDesc[which]); DialogDemoActivity.this.chNum = which; // 保存选项的索引 } }).create(); dialog.show(); } } }
7 、复选框对话框
package com.iflytek.demo; 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.TextView; public class DialogDemoActivity extends Activity { private Button mybut = null; // 定义按钮 private TextView mych = null; // 定义文本 private String fruitData[] = new String[] { "苹果", "西瓜", "水蜜桃" }; private boolean chData[] = new boolean[] { true, true, false }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.mybut = (Button) super.findViewById(R.id.mybut); // 取得按钮 this.mych = (TextView) super.findViewById(R.id.mych); // 取得文本 this.mybut.setOnClickListener(new OnClickListenerImpl()); // 设置事件类 } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { Dialog dialog = new AlertDialog.Builder(DialogDemoActivity.this) .setIcon(R.drawable.ic_launcher) .setTitle("请选择你喜欢吃的水果?") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setMultiChoiceItems(DialogDemoActivity.this.fruitData, DialogDemoActivity.this.chData, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { for (int x = 0; x < DialogDemoActivity.this.fruitData.length; x++) { if (x == which && isChecked) { // 当前选项被选中 DialogDemoActivity.this.mych .append(DialogDemoActivity.this.fruitData[x] + "、"); } } } }).create(); dialog.show(); } } }
8 、定制对话框
res/layout/login.xml
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TableRow > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:text="用户名:" android:textSize="8pt" /> <EditText android:layout_height="wrap_content" android:width="60pt" /> </TableRow> <TableRow > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:text="密 码:" android:textSize="8pt" /> <EditText android:layout_height="wrap_content" android:password="true" android:width="60pt" /> </TableRow> </TableLayout>
Activity
package com.iflytek.demo; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class DialogDemoActivity extends Activity { private Button mybut = null; // 定义按钮 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.mybut = (Button) super.findViewById(R.id.mybut); // 取得按钮 this.mybut.setOnClickListener(new OnClickListenerImpl()); // 设置事件类 } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { LayoutInflater factory = LayoutInflater.from(DialogDemoActivity.this); View myView = factory.inflate(R.layout.login, null); Dialog dialog = new AlertDialog.Builder(DialogDemoActivity.this) .setIcon(R.drawable.ic_launcher) .setTitle("用户登录") .setPositiveButton("登录", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).setView(myView).create(); dialog.show(); } } }
9 、日期对话框
package com.iflytek.demo; import android.app.Activity; import android.app.DatePickerDialog; import android.app.Dialog; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.DatePicker; import android.widget.TextView; public class DialogDemoActivity extends Activity { private Button mybut = null; // 定义按钮 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.mybut = (Button) super.findViewById(R.id.mybut); // 取得按钮 this.mybut.setOnClickListener(new OnClickListenerImpl()); // 设置事件类 } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { Dialog dialog = new DatePickerDialog(DialogDemoActivity.this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { TextView text = (TextView) DialogDemoActivity.this .findViewById(R.id.txt); text.setText("更新的日期为:" + year + "-" + monthOfYear + "-" + dayOfMonth); } }, 1981, 8, 19); // 默认的年、月、日 dialog.show(); // 显示对话框 } } }
10 、设置时间对话框
package com.iflytek.demo; import android.app.Activity; import android.app.Dialog; import android.app.TimePickerDialog; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.TimePicker; public class DialogDemoActivity extends Activity { private Button mybut = null; // 定义按钮 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.mybut = (Button) super.findViewById(R.id.mybut); // 取得按钮 this.mybut.setOnClickListener(new OnClickListenerImpl()); // 设置事件类 } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { Dialog dialog = new TimePickerDialog(DialogDemoActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { TextView text = (TextView) DialogDemoActivity.this .findViewById(R.id.txt); text.setText("时间为:" + hourOfDay + ":" + minute); } }, 19, 20, true); dialog.show(); // 显示对话框 } } }
11 、进度对话框
package com.iflytek.demo; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class DialogDemoActivity extends Activity { private Button mybut = null; // 定义按钮 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.mybut = (Button) super.findViewById(R.id.mybut); // 取得按钮 this.mybut.setOnClickListener(new OnClickListenerImpl()); // 设置事件类 } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { final ProgressDialog proDia = ProgressDialog.show( DialogDemoActivity.this, "搜索网络", "请耐心等待..."); new Thread() { public void run() { // 线程的主体类 try { Thread.sleep(3000); // 运行三秒 } catch (Exception e) { } finally { proDia.dismiss(); // 关闭对话框 } } }.start(); proDia.show(); // 显示对话框 } } }
12 、水平条进度
package com.iflytek.demo; import android.app.Activity; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class DialogDemoActivity extends Activity { private Button mybut = null; // 定义按钮 private static final int MAX_PROGRESS = 100; // 最大值 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.mybut = (Button) super.findViewById(R.id.mybut); // 取得按钮 this.mybut.setOnClickListener(new OnClickListenerImpl()); // 设置事件类 } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { final ProgressDialog proDia = new ProgressDialog( DialogDemoActivity.this); proDia.setTitle("搜索网络"); proDia.setMessage("请耐心等待"); proDia.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 水平进度条 proDia.setMax(MAX_PROGRESS); // 设置进度的最大值 proDia.setProgress(30); // 从进度30开始 proDia.setButton("后台处理", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { proDia.dismiss(); // 关闭对话框 } }); proDia.setButton2("详细信息", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); proDia.onStart(); // 启动进度 new Thread() { public void run() { // 线程的主体类 for (int x = 0; x < MAX_PROGRESS; x++) { try { Thread.sleep(500); // 运行三秒 } catch (Exception e) { } proDia.incrementProgressBy(1); } proDia.dismiss(); } }.start(); proDia.show(); // 显示对话框 } } }