Android提供了丰富的对话框支持,他有以下4种常用对话框形式:
1、AlertDialog:功能最丰富,应用最广的对话框
2、ProgressDialof:进度条对话框
3、DatePickerDialog:日期选择对话框
4、TimePickerDialog:时间选择对话框
这四种对话框中的AlertDialog是其他三种对话框的父类;下面是他们的继承关系:
使用AlertDialog创建对话框:
AlertDialog生成的对话框有如下几个区域:
使用对话框其实就是创建这几个区域,所以创建对话框就要经过这么几个步骤:
1、创建AlertDialog.Builder对象
2、调用AlertDialog.Builder对象的setTitle()或setCustomTitle()方法设置标题
3、调用setIcon()方法设置图标
4、调用相关的方法设置内容区
5、调用setPositiveButton()、setNegativeButton()方法或setNeutralButton()方法添加按钮区的按钮
6、调用create()方法创建AlterDialog对象,最后调用show()方法将对话框显现出来
这几个步骤中第四步,能创建多种不同内容的对话框,创建内容的方法有很多:
setMessage():设置最简单的文本对话框
setItems():设置对话框内容为简单列表项
setSingleChoiceItems():设置对话框内容为单选列表项
setMultiChoiceItems():设置对话框内容为多选列表项
setAdapter():设置内容为自定义列表项
setView():设置对话框内容为自定义View
下面给出创建简单的退出当前Activity的对话框的实例:
布局文件中定义一个退出按钮:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="退出" />
</LinearLayout>
代码部分:
public class MainActivity extends Activity {
private AlertDialog.Builder builder;
private Button btn;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn= (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
createDialog();
}
});
private void createDialog() {
// TODO Auto-generated method stub
builder = new AlertDialog.Builder(this);
builder.setTitle("退出Activity");
builder.setIcon(R.drawable.ic_launcher);
builder.setMessage("是否退出");
builder.setPositiveButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
builder.setNegativeButton("确定",new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
MainActivity.this.finish();
}
});
builder.create();
builder.show();
}
点击退出按钮后弹出对话框效果如下:
点击确定退出程序。
创建简单列表项对话框的代码:
public class SetItemActivity extends Activity {
private AlertDialog.Builder builder;
private TextView tv;
private Button btn;
private String[] books = {"java","Android"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_item);
builder = new AlertDialog.Builder(this);
tv = (TextView) findViewById(R.id.item_tv);
btn = (Button) findViewById(R.id.item_btn);
btn.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
createDialog();
}
});
}
private void createDialog() {
// TODO Auto-generated method stub
builder = new AlertDialog.Builder(this);
builder.setTitle("一个Dialog");
builder.setIcon(R.drawable.ic_launcher);
createcontent();
builder.setPositiveButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
tv.setText("你好啊"+new java.util.Date());
}
});
builder.setNegativeButton("确定",new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
tv.setText("asdf");
}
});
builder.create();
builder.show();
}
private void createcontent() {
builder.setItems(books, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tv.setText(books[which]);
}
});
}
}
这个程序的布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
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="com.example.dialog.SetItemActivity" >
<TextView
android:id="@+id/item_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:id="@+id/item_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="简单列表项对话框" />
</LinearLayout>
单机按钮后出现如下效果:
单击每个ltem可以改变textView中的Text。
接着是自定义列表项对话框的例子,这里做了个和简单列表项效果相同的列表项对话框:
public class SetAdapterActivity extends Activity {
private String[] items={"java","android","数据库"};
private AlertDialog.Builder builder;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_adapter);
tv = (TextView)findViewById(R.id.adapter_tv);
createDialog();
}
private void createDialog() {
// TODO Auto-generated method stub
builder = new AlertDialog.Builder(this);
builder.setTitle("一个Dialog");
builder.setIcon(R.drawable.ic_launcher);
createcontent();
builder.setPositiveButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
tv.setText("你好啊");
}
});
builder.setNegativeButton("确定",new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
tv.setText("asdf");
}
});
builder.create();
builder.show();
}
private void createcontent() {
builder.setAdapter
(new ArrayAdapter<String>
(this,android.R.layout.simple_list_item_1,items), null);
}
}
布局文件只有一个按钮,不在给出。
对于单选列表项,setSingleChoiceItems()方法既可以传入数组,也可以传入Cursor作为对象,还可以传入ListAdapter作为参数,只是如果传入的是ListAdapter,那么列表项组件则由ListAdapter提供:
下面使用数组创建一个简单的DiaLog:
btn6.setOnClickListener(new android.view.View.OnClickListener(){
@Override
public void onClick(View v) {
builder = new AlertDialog.Builder(MainActivity.this)
.setTitle("单选对话框")
.setIcon(R.drawable.ic_launcher)
.setSingleChoiceItems
(new String []{"java","oracle","web"},
//0为默认的单选位置
0, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
builder.create().show();
}
});
点击该按钮出现如下对话框:
多选项对话框与单选对话框类似,只是第二个参数是boolean类型的数组,该参数有两个作用:
1、设置初始化时选中那些列表项
2、能动态的获取到列表项的选中状态
对话框的setView()方法只要传入一个定义好的View,创建的对话框就能显示自定义的View。