在图形界面之中,对话框也是人机交互的一种重要形式,程序可以通过对话框对用户进行一些信息的提示,而用户也可以通过对话框的和程序进行一些简单的交互操作。
在Android的开发之中,所有的对话框都是从android.app.Dialog类继承而来,此类继承结构如下:
java.lang.Object
?android.app.Dialog
DIalog常用的方法
1
|
public void setTitle(CharSequence title)
|
普通
|
设置对话框的显示标题
|
2
|
public void setTitle(int titleId)
|
普通
|
设置对话框的显示标题,内容为资源文件指定
|
3
|
public void show()
|
普通
|
显示对话框
|
4
|
public void hide()
|
普通
|
隐藏对话框
|
5
|
public boolean isShowing()
|
普通
|
判断对话框是否显示
|
6
|
public void setContentView(View view)
|
普通
|
设置View组件
|
7
|
public void setContentView(int layoutResID)
|
普通
|
设置View组件的ID
|
8
|
public void dismiss()
|
普通
|
隐藏对话框
|
9
|
public void closeOptionsMenu()
|
普通
|
关闭选项菜单
|
10
|
public void setDismissMessage(Message msg)
|
普通
|
设置隐藏对话框时的消息
|
11
|
public void setCancelable(boolean flag)
|
普通
|
设置是否可以取消
|
12
|
public void setCancelMessage(Message msg)
|
普通
|
设置对话框取消时的消息
|
13
|
public void cancel()
|
普通
|
取消对话框,与dismiss()方法类似
|
14
|
public Window getWindow()
|
普通
|
取得Window对象
|
15
|
public void setOnShowListener(
DialogInterface.OnShowListener listener)
|
普通
|
设置对话框打开时监听
|
16
|
public void setOnDismissListener (
DialogInterface.OnDismissListener listener)
|
普通
|
对话框隐藏时监听
|
17
|
public void setOnCancelListener(
DialogInterface.OnCancelListener listener)
|
普通
|
设置对话框取消时监听
|
一般情况下我们用AlertDialog中的内部类来实例化 dialog对象
DIalog中常用的方法,大家了解就行了,具体会在代码中说明
1
|
public AlertDialog.Builder(Context context)
|
构造
|
创建AlertDialog.Builder对象
|
2
|
public AlertDialog.Builder setMessage (int messageId)
|
普通
|
设置显示信息的资源ID
|
3
|
public AlertDialog.Builder setMessage (CharSequence message)
|
普通
|
设置显示信息的字符串
|
4
|
public AlertDialog.Builder setView(View view)
|
普通
|
设置显示的View组件
|
5
|
public AlertDialog.Builder setSingleChoiceItems (CharSequence[] items, int checkedItem, DialogInterface.OnClickListener listener)
|
普通
|
设置对话框显示一个单选的List,指定默认选中项,同时设置监听处理操作
|
6
|
public AlertDialog.Builder setSingleChoiceItems (ListAdapter adapter, int checkedItem, DialogInterface.OnClickListener listener)
|
普通
|
设置对话框显示一个单选的List,指定默认选中项,同时设置监听处理操作
|
7
|
public AlertDialog.Builder setMultiChoiceItems (CharSequence[] items, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener listener)
|
普通
|
设置对话框显示一个复选的List,同时设置监听处理操作
|
8
|
public AlertDialog.Builder setPositiveButton (CharSequence text, DialogInterface.OnClickListener listener)
|
普通
|
为对话框添加一个确认按钮,同时设置监听操作
|
9
|
public AlertDialog.Builder setPositiveButton (int textId, DialogInterface.OnClickListener listener)
|
普通
|
为对话框添加一个确认按钮,显示内容由资源文件指定,并设置监听操作
|
10
|
public AlertDialog.Builder setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener)
|
普通
|
为对话框设置一个取消按钮,并设置监听操作
|
11
|
public AlertDialog.Builder setNegativeButton (int textId, DialogInterface.OnClickListener listener)
|
普通
|
为对话框设置一个取消按钮,显示内容由资源文件指定,并设置监听操作
|
12
|
public AlertDialog.Builder setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener)
|
普通
|
设置一个普通按钮,并设置监听操作
|
13
|
public AlertDialog.Builder setNeutralButton(int textId, DialogInterface.OnClickListener listener)
|
普通
|
设置一个普通按钮,显示内容由资源文件指定,并设置监听操作
|
14
|
public AlertDialog.Builder setItems(CharSequence[] items, DialogInterface.OnClickListener listener)
|
普通
|
将信息内容设置为列表项,同时设置监听操作
|
15
|
public AlertDialog.Builder setItems(int itemsId, DialogInterface.OnClickListener listener)
|
普通
|
将信息内容设置为列表项,列表项内容由资源文件指定,同时设置监听操作
|
16
|
public AlertDialog create()
|
普通
|
创建AlertDialog的实例化对象
|
17
|
public AlertDialog.Builder setIcon(Drawable icon)
|
普通
|
设置显示的图标
|
18
|
public AlertDialog.Builder setIcon(int iconId)
|
普通
|
设置要显示图标的资源ID
|
了解了AlertDialog的方法,我们来看例子
1******最简单的对话框*******button1
2******带按钮的对话框*******button2
3******带事件的对话框*******button3
4******带选项的对话框*******button4
5******带单选的对话框*******button5
6******带多选的对话框*******button6
7******带进度条对话框*******button7
8******日期选择对话框*******button8
9******事件选择对话框*******button9
10******自定义对话框*******button10
下面看代码
main XML文件
<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/button10" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/button9" android:layout_alignTop="@+id/button1" android:layout_toRightOf="@+id/button3" android:text="自定义对话框" /> <Button android:id="@+id/button9" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button8" android:layout_alignParentBottom="true" android:text="时间选择对话框" /> <Button android:id="@+id/button8" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/button9" android:layout_alignRight="@+id/button4" android:text="日期选择对话框" /> <Button android:id="@+id/button7" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/button8" android:layout_alignLeft="@+id/button8" android:text="进度条对话框" /> <Button android:id="@+id/button6" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/button7" android:layout_alignLeft="@+id/button7" android:text="带多选按钮对话框" /> <Button android:id="@+id/button5" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/button6" android:layout_alignLeft="@+id/button6" android:text="带单选按钮对话框" /> <Button android:id="@+id/button4" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/button5" android:layout_alignRight="@+id/button2" android:text="带item的对话框" /> <Button android:id="@+id/button3" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/button4" android:layout_alignLeft="@+id/button4" android:text="带事件处理的对话框" /> <Button android:id="@+id/button2" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/button3" android:layout_alignParentLeft="true" android:layout_marginLeft="21dp" android:text="带按钮的对话框" /> <Button android:id="@+id/button1" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/button2" android:layout_alignLeft="@+id/button3" android:text="最简单的Dialog" /> </RelativeLayout></span>
自定义custom.xml
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/MyLayout" 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></span>
JAVA文件
<span style="font-size:18px;">package com.example.dialog; import android.app.Activity; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.app.DatePickerDialog.OnDateSetListener; import android.app.Dialog; import android.app.ProgressDialog; import android.app.TimePickerDialog; import android.app.TimePickerDialog.OnTimeSetListener; 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; import android.widget.DatePicker; import android.widget.TimePicker; import android.widget.Toast; public class MainActivity extends Activity { private Button button1, button2, button3, button4, button5, button6, button7, button8, button9,button10; private String CityData[] = { "河南", "北京", "上海", "天津", "湖南", "深圳" };//city数据 private String SexData[] = { "男", "女" };//性别数据 private String ColorData[] = { "红", "橙", "黄", "绿", "青", "蓝", "紫" };//颜色数据 private boolean ColorChoiced[] = { false, false, false, false, false, false, false };// 设置默认选中项 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 为按钮实例化 button1 = (Button) this.findViewById(R.id.button1); button2 = (Button) this.findViewById(R.id.button2); button3 = (Button) this.findViewById(R.id.button3); button4 = (Button) this.findViewById(R.id.button4); button5 = (Button) this.findViewById(R.id.button5); button6 = (Button) this.findViewById(R.id.button6); button7 = (Button) this.findViewById(R.id.button7); button8 = (Button) this.findViewById(R.id.button8); button9 = (Button) this.findViewById(R.id.button9); button10 = (Button) this.findViewById(R.id.button10); // 最简单的对话框 button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub Dialog dialog = new AlertDialog.Builder(MainActivity.this) .setTitle("关于我们")//设置标题 .setMessage("飞扬软件有限公司")//设置提示信息 .setIcon(R.drawable.a2)//设置图标 .create();//创建对话框 dialog.show();//显示对话框 } }); // 带按钮的信息处理对话框 button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub Dialog dialog = new AlertDialog.Builder(MainActivity.this) .setTitle("删除信息")//设置标题 .setMessage("您确定要删除该条信息吗?")//设置提示信息 .setIcon(R.drawable.a2)//设置图标 .setNegativeButton("取消", null)//设置取消按钮 .setPositiveButton("确定", null)//设置确定按钮 .create();//创建对话框 dialog.show();//显示对话框 } }); // 带事件处理的对话框 button3.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub Dialog dialog = new AlertDialog.Builder(MainActivity.this) .setTitle("退出程序") .setMessage("您确定要退出程序吗?") .setIcon(R.drawable.a2) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dialogInterface, int whitch) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "程序即将退出", 2).show(); // finish(); 为了演示效果,不进行真实退出,用土司代替 } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub } }).create(); dialog.show(); } }); // 对话框列表 button4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub Dialog dialog = new AlertDialog.Builder(MainActivity.this) .setTitle("请选择您的就业城市") .setIcon(R.drawable.a2) .setNegativeButton("取消", null) .setItems(CityData, new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dInterface, int whitch) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "您选择了:" + CityData[whitch], 2) .show(); } }).create(); dialog.show(); } }); // 带单选按钮的对话框 button5.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub Dialog dialog = new AlertDialog.Builder(MainActivity.this) .setTitle("请选择您的性别") .setSingleChoiceItems(SexData, 0, new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dInterface, int whitch) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "您选择了:" + SexData[whitch], 2) .show(); } }).setIcon(R.drawable.a2) .setNegativeButton("取消", null) .setPositiveButton("确定", null).create(); dialog.show(); } }); // 带多选框的对话框 button6.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub Dialog dialog = new AlertDialog.Builder(MainActivity.this) .setTitle("请选择您喜欢的颜色") .setMultiChoiceItems( ColorData, ColorChoiced, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int whitch, boolean isChecked) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "您选择了" + ColorData[whitch], 2) .show(); // 在这里没有做判断,所以无论是选中还是去选都会触发该事件,有兴趣的读者可以设置IsChecked判断 } }).setIcon(R.drawable.a2) .setNegativeButton("取消", null) .setPositiveButton("确定", null).create(); dialog.show(); } }); button7.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub final ProgressDialog dialog = new ProgressDialog( MainActivity.this); dialog.setMessage("正在加载信息,请稍后!"); dialog.setTitle("正在加载"); dialog.setIcon(R.drawable.a2); dialog.onStart(); new Thread() { @Override public void run() { // TODO Auto-generated method stub try { Thread.sleep(3 * 1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { dialog.dismiss(); } } }.start(); dialog.show(); } }); // 日期选择对话框 button8.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub DatePickerDialog dialog = new DatePickerDialog( MainActivity.this, new OnDateSetListener() { @Override public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) { // TODO Auto-generated method stub Toast.makeText( MainActivity.this, "设置的时间为:" + year + "年" + (monthOfYear+1) //此处month要加1,原始月份从零开始了 + "月" + dayOfMonth + "日", 2) .show(); } }, 2014, 8, 17); dialog.show(); } }); // 时间选择对话框 button9.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub TimePickerDialog dialog =new TimePickerDialog(MainActivity.this, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker arg0, int hourOfDay, int minute) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "设置时间为:"+hourOfDay+"时"+minute+"分", 2).show(); } }, 20, 55, true); dialog.show(); } }); // 自定义对话框 button10.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub View myView=LayoutInflater.from(getApplication()).inflate(R.layout.custom, null);//将layout对象转换为VIew对象 Dialog dialog = new AlertDialog.Builder(MainActivity.this) .setTitle("用户登陆") .setIcon(R.drawable.a2) .setNegativeButton("取消", null) .setPositiveButton("登录", null) .setView(myView)//设置要显示的View组件 .create(); dialog.show(); } }); } } </span>
效果图
依次为对应的button效果
通过单选、多选对话框,可以设计出很多的用户交互,进度条与线程,异步操作的结合处理耗时操作
自定义对话框大大增加了UI的多样性,为更好地反馈交互提供了可能
下节预报:
ImageSwitcher图片切换组件