在学习swing的时候我们讲过在普通桌面系统使用对话框,一般对话框可以提醒用户选择或者弹出一些警告信息,在android应用中同样有类似的对话框。其功能和效果与桌面系统类似,也是和获得用户的焦点,并且或阻断用户的当前操作,所以我们必须适当的使用对话框,并选择合适的对话框,以免影响用户体验。
要实现一个对话框,我们通常可以用三种方式:
1、使用Dialog类,这个类使用调用它的Activity构造和控制的,所以不用在androidManifest.xml文件中注册,使用起来比较方便,而且android也提供了不同的Dialog类的实现。
2、可以让一个Activity类,以窗口的模式显示。这样在实现Activity之间的跳转时,新的Activity只会以对话框的方式显示。
3、使用Toast,这种方式应该来说是最简单的,而且与普通对话框最大不同是它不会阻断用户的当前操作,仅仅只是一个简单提示,并且会自动释放。
一、使用AlertDialog类实现对话框。
AlertDialog是最简单通用的建立对话框的实现,它需要先建立一个窗口Builder类,设置好窗口的基本属相只用使用show()方法显示窗口即可。
1、简单实现。我们只需要设定弹出框的标题,提示信息和按钮以及按钮的单击事件即可。效果如下图:
代码如下:
commonButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// 先定义建造者 Builder 定义窗口基本属性
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this.;
builder.setTitle("窗口的标题");
builder.setMessage("提示内容");
// 确认按钮
builder.setPositiveButton("确认",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
Log.e("点击了。", "确认");
}
});
builder.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
Log.e("点击了。", "取消");
}
});
// 窗口show()显示窗口
builder.create().show();
}
});
2、加载View视图,我们也可以使用setView方法,设定弹出框使用一个视图展示。效果如下图:
首先,先在res/layout目录下新建一个布局login.xml,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="用户名"
android:ems="10" >
</EditText>
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:hint="密码"
android:inputType="textPassword" />
</LinearLayout>
然后在代码中加载这个布局文件,通过setView设置到弹出框即可:
viewButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// 先定义建造者 Builder 定义窗口基本属性
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this.;
// 如何在程序中加载XML的视图View类
LayoutInflater layoutInflater = LayoutInflater
.from(MainActivity.this.;
View view = layoutInflater.inflate(R.layout.login, null);
builder.setView(view);
builder.setPositiveButton("登录",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
});
builder.create().show();
}
});
3、列表显示,我们也可以使用setItems设置一个字符串列表,然弹出框显示列表,效果如下图:
实现代码如下:
listButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// 先定义建造者 Builder 定义窗口基本属性
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this.;
String[] items = { "复制", "粘贴", "删除" };
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int location) {
switch (location) {
case 0:
Log.e("复制", "复制");
break;
case 1:
Log.e("粘贴", "粘贴");
break;
case 2:
Log.e("删除", "删除");
break;
}
}
});
builder.create().show();
}
});
更加详细的窗口示例可以参考一下网址:
http://developer.android.com/guide/topics/ui/dialogs.html
二、使用Activity类,以窗口的模式显示,效果如下图:
1、通过向导新建一个Activity,类名为:DialgActivity类。
public class DialgActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialg);
}
}
2、修改androidManifest.xml,修改其主题样式为窗口模式。
<activity
android:name="com.example.androiddialog.DialgActivity"
android:label="@string/title_activity_dialg"
android:theme="@android:style/Theme.Dialog" >
</activity>
3、在代码中启动这个Activity,就会以弹出框的模式显示了。
activityButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent();
intent.setClass(MainActivity.this. DialgActivity.class);
startActivity(intent);
}
});
三、Toast的使用。
Toast是android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失。效果如下:
实现代码如下:
toastButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(MainActivity.this. "消息内容", Toast.LENGTH_LONG)
.show();
}
});