Android学习:对话框与消息框
学习要点:1、了解Android系统各种对话框的基本功能
2、掌握利用AlertDialog创建对话框的方法
3、掌握利用Toast创建消息提示框的方法
1、利用AlertDialog创建对话框
对话框是Activity运行时显示的界面,是应用程序对于用户交互的主要方式之一,例如,对于用户登录时经常出现的“用户名和账号不能为空”这种提示信息,就可以利用对话框来实现。
当对话框提示时,当前的Activity会失去焦点,此时,用户与该Activity不能进行交互,并且当对话框获得焦点时,用户可以操作该对话框。
Android系统中有多种对话框类型,主要包括普通对话框、包含按钮的对话框、单选按钮对话框、复选框对话框、列表对话框、可输入数据对话框、进度条对话框日期对话框以及时间对话框。另外,用户也可以自定义对话框。
AlertDialog构造方法简介
AlertDialog构造方法是Protected类型的,所以不能直接通过new来创建一个AlertDialog,而要用AlertDialog.Builder中的create()方法。
1、setTitle: 为对话框设置标题
2、setIcon: 为对话框设置图标
3、setMessage: 为对话框设置内容
4、setView: 为对话框设置自定义样式
5、setItems: 设置对话框要显示的一个list,一般用于要显示几个命令的情况
6、setMultiChoiceItems: 用来设置对话框显示一系列的复选框
7、setNeutralButton: 用来设置普通按钮
8、setPositiveButton:为对话框添加Yes按钮
9、setNegativeButton:为对话框添加No按钮
10、create:创建对话框
11、show:显示对话框。
具体练习代码如下:
//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:layout_gravity="center"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5种类型\n常用对话框"
android:textAlignment="center"
android:textColor="@android:color/black"/>
<Space
android:layout_width="match_parent"
android:layout_height="20dp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定/取消对话框"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="单选对话框" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="多选对话框"/>
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="列表对话框"/>
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="可输入对话框"/>
<Space
android:layout_width="match_parent"
android:layout_height="20dp" />
<TextView
android:id="@+id/textView1"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="获得的对话框结果"
android:textColor="@android:color/black"/>
</LinearLayout>
//MainActivity页面代码
package zut.edu.e8;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
//选项数组(喜欢的出行方式)
final String[] travelType = {"高铁", "飞机", "汽车"};
//获取选项
private String selectedItem = "";
//获取另一个选项
private String selectedItem2 = "";
//选项初始化
private boolean[] init = new boolean[]{false, true, false};
//默认选项
private boolean[] mtemp = new boolean[3];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//选项初始化暂缓
for(int i = 0;i<init.length;i++){
mtemp[i] = init[i];
}
//实例化一个TextView,用于显示选项结果
final TextView textView1 = (TextView) findViewById(R.id.textView1);
/* 1/5 : 确定/取消对话框 */
Button button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
textView1.setText("");
//实例化一个AlertDialog对象
new AlertDialog.Builder(MainActivity.this)
//为对话框设置图标
.setIcon(R.drawable.ic_launcher)
//设置对话框标题
.setTitle("提示")
//设置对话框内容
.setMessage("是否退出程序?")
//"确定"按钮单击事件,退出当前程序
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();//退出当前程序
}
})
//取消按钮单击,关闭对话框
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
textView1.setText("你单击了取消按钮。");
}
})
//创建并显示对话框
.create().show();
}
});
/* 2/5 单选对话框 */
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView1.setText("");
selectedItem = travelType[1]; //1.为单选对话框中的checkedItem(默认选项)
new AlertDialog.Builder(MainActivity.this)
.setIcon(R.drawable.ic_launcher)
.setTitle("请选择你最喜欢出行方式")
//设置对话框类型
.setSingleChoiceItems(travelType, 1,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//MainActivity.this.selectedItem = which;
selectedItem = travelType[which];
textView1.setText("你选择了:"+
selectedItem);
}
})
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
textView1.setText("你最终的选择是:"+
selectedItem);
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
textView1.setText("你取消了选择。");
}
})
.create().show();
}
});
/* 3/5 复选对话框 */
Button button3 = (Button)findViewById(R.id.button3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView1.setText("");
new AlertDialog.Builder(MainActivity.this)
.setIcon(R.drawable.ic_launcher)
.setTitle("请选择你喜欢的出行方式:")
.setMultiChoiceItems(travelType, init,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
selectedItem = travelType[which];
if(init[which]){
textView1.setText("你选择了:" +
selectedItem);
}
else {
textView1.setText("你取消了选择的:"+
selectedItem);
}
}
})
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String temp = "";
//遍历获取所选项
for (int i= 0;i<init.length;i++){
if (init[i]){
temp += "/n" + travelType[i];
}
}
textView1.setText("你的最终选择是:"+temp);
//还原默认选项
for (int i = 0;i<init.length;i++){
init[i] = mtemp[1];
}
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
textView1.setText("你取消了选择。");
}
})
.create().show();
}
});
/* 4/5 列表对话框 */
Button button4 = (Button)findViewById(R.id.button4);
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView1.setText("");
new AlertDialog.Builder(MainActivity.this)
.setTitle("请选择出你喜欢的出行方式:")
.setIcon(R.drawable.ic_launcher)
.setItems(travelType, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// MainActivity.this.selectedItem = which
selectedItem2 = travelType[which];
textView1.setText("你选择了:"+selectedItem2);
}
})
//注:通常无须再为“确定”和“取消”按钮编写相应程序
.create().show();
}
});
/* 5/5 可输入对话框 */
Button button5 = (Button)findViewById(R.id.button5);
button5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//实例化一个EditText,用于接收用户输入
final EditText travelInput = new EditText(MainActivity.this);
new AlertDialog.Builder(MainActivity.this)
.setIcon(R.drawable.ic_launcher)
.setTitle("请输入你喜欢的出行方式:")
.setView(travelInput)
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
textView1.setText("你输入的是:"+travelInput.getText().toString());
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
textView1.setText("你取消了选择。");
}
})
.create().show();
}
});
}
}
【说明】 在Android2.X版本中,“确定/ok”按钮位于对话框的左侧,“取消/Cancel”按钮位于对话框的右侧,而在4.0及以后版本中则调换了位置。
2、利用Toast显示消息提示框
在Android系统中,如果仅是弹出一个小提示,向用户短时、简要地显示相应的信息(如用音量控制提示或者信息保存成功提示等),而无须用户进行其他操作,就可以使用Toast来实现(显示一个提示或者说明)
Toast是Android系统提供的一种简洁的信息视图,该视图浮于应用程序之上。与Dialog不同的是,Toast是没有焦点的,所以,即使用户正在输入也不影响该视图的显示。另外,Toast显示的时间有限,过了一定时间就会自动消失。
1、Toast简介
Toast是一个类,主要管理消息的提示。
makeText(Context context,String text,int Toast.LENGTH_LONG/Toast.LENGTH_SHORT)是Toast的一个方法,用来显示相应的信息,其三个参数的定义如下:
第一个参数:上下文参数,如果context等于this,指在当前页面显示
第二个参数:要显示的内容
第三个参数:两个都可选的显示时间参数,Toast.LENGTH_LONG时间稍微长一点(约3.5s),Toast.LENGTH_SHORT时间稍微短一点(约2s)
Toast消息提醒框通过show()方法来显示,所以Toast的基本代码是
Toast.makeText(context,text,Toast.LENGTH_LONG).show()
或者
Toast.makeText(context,text,Toast.LENGTH_SHORT).show()
具体练习代码如下:
//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:layout_gravity="center"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn01"
android:text="确认取消按钮"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvMsg"
android:text="提示框"/>
</LinearLayout>
//MainActivity页面代码
package zut.edu.e9;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
final String[] travelType={"高铁","飞机","汽车"};
String selectItem;//选中项
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn01=(Button)findViewById(R.id.btn01);
final TextView tvMsg=(TextView) findViewById(R.id.tvMsg);
//代码应该在按钮单击事件里面
btn01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//对话框放在按钮时间里面
new AlertDialog.Builder(MainActivity.this)
.setTitle("请选择出行方式")
.setSingleChoiceItems(travelType, 1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
selectItem=travelType[which];//将当前选择索引复制给数组,取值
tvMsg.setText("你选择了"+selectItem);
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
tvMsg.setText("你的选择是:"+selectItem);
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// tvMsg.setText("你取消了"+selectItem);
//1.当前类 2.内容
Toast.makeText(MainActivity.this,"选择取消",Toast.LENGTH_LONG).show();
}
})
.create().show();
}
});
}
}