在图形界面之中,对话框也是人机交互的一种重要形式,程序可以通过对话框对用户进行一些信息的提示,而用户也可以通过对话框的和程序进行一些简单的交互操作。
在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图片切换组件