使用Toast显示消息提示框
Toast类用于在屏幕中显示一个消息提示框,该消息提示框没有任何控制按钮,并且不会获得焦点,经 过一定时间后自动消失。
(1)创建一个Toast对象。通常有两种方法:一种是使用构造方式进行创建;另一种是调用Toast类的makeText()方法创建。
使用构造方法创建一个名称为toast的Toast对象的基本代码如下:
Toast toast=new Toast(this);
(2)调用Toast类的makeText()方法创建一个名称为toast的Toast对象的基本代码如下:
Toast toast=Toast.makeText(this, "要显示的内容", Toast.LENGTH_SHORT);
方法 描述
setDuration(int duration) 用于设置消息提示框持续的时间,参数值通常使用Toast.LENGTH_LONG或Toast.LENGTH_SHORT
setGravity(int gravity, int xOffset, int yOffset) 用于设置消息提示框的位置,参数gravity用于指定对齐方式;xOffset和yOffset用于指定具体的偏移值
setMargin(float horizontalMargin, float verticalMargin) 用于设置消息提示的页边距
setText(CharSequences) 用于设置要显示的文本内容
setView(Viewview) 用于设置将要在消息提示框中显示的视图
(3)调用Toast类的show()方法显示消息提示框。需要注意的是,一定要调用该方法,否则设置的消息提示框将不显示。
下面通过一个具体的实例说明如何使用Toast类显示消息提示框。
通过两种方法显示消息提示框。
(1)修改新建项目的res\layout目录下的布局文件main.xml,
为默认添加的垂直线性布局管理器设置一个android:id属性,关键代码如下:
android:id="@+id/ll"
(2)在主活动MainActivity.java的onCreate()方法中,通过makeText()方法显示一个消息提示框,关键代码如下:
Toast.makeText(this, "我是通过makeText()方法创建的消息提示框", Toast.LENGTH_LONG).show();
注意:在最后一定不要忘记调用show()方法,否则该消息提示框将不显示。
(3)通过Toast类的构造方法创建一个消息提示框,并设置其持续时间、对齐方式以及要显示的内容等,这里设置其显示内容为带图标的消息,具体代码如下:
Toast toast=new Toast(this); toast.setDuration(Toast.LENGTH_SHORT); //设置持续时间
toast.setGravity(Gravity.CENTER, 0, 0); //设置对齐方式
LinearLayout ll=new LinearLayout(this); //创建一个线性布局管理器
ImageView iv=new ImageView(this); //创建一个
ImageView iv.setImageResource(R.drawable.alerm); //设置要显示的图片
iv.setPadding(0, 0, 5, 0); //设置ImageView的内边距
ll.addView(iv); //将ImageView添加到线性布局管理器中
TextView tv=new TextView(this); //创建一个TextView
tv.setText("我是通过构造方法创建的消息提示框"); //为TextView设置文本内容
ll.addView(tv); //将TextView添加到线性布局管理器中
toast.setView(ll); //设置消息提示框中要显示的视图
toast.show(); //显示消息提示框
使用Notification在状态栏上显示通知(未实现)
在使用手机时,当有未接来电或是新短消息时,手机会给出相应的提示信息,这些提示信息通常会显示到手机屏幕的状态栏上。Android也提供了用于处理这些信息的类,它们是Notification和 NotificationManager。其中,Notification代表的是具有全局效果的通知;而NotificationManager则是用于发送Notification通知的系统服务。
使用Notification和NotificationManager类发送和显示通知也比较简单,大致可以分为以下4个步骤。 (1)调用getSystemService()方法获取系统的NotificationManager服务。
(2)创建一个Notification对象,并为其设置各种属性。
(3)为Notification对象设置事件信息。
(4)通过NotificationManager类的notify()方法发送Notification通知
实现在状态栏上显示通知和删除通知。
(1)修改新建项目的res\layout目录下的布局文件main27.xml,将默认添加的TextView组件删除,然后添加两个普通按钮,一个用于显示通知,另一个用于删除通知。由于此处的布局代码比较简单,这里就不再 给出。
(2)在主活动MainActivity.java的onCreate()方法中,调用getSystemService()方法获取系统的NotificationManager服务,关键代码如下:
//获取通知管理器,用于发送通知
final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
(3)获取“显示通知”按钮,并为其添加单击事件监听器,在重写的onClick()方法中,首先通过无参的构造方法创建一个Notification对象,并设置其相关属性,然后通过通知管理器发送该通知,接下来通过构 造方法Notification(int icon, CharSequencetickerText, longwhen)创建一个通知,并为其设置事件信息,最后通过通知管理器发送该通知,具体代码如下:
//为“显示通知”按钮添加单击事件监听器
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Notification notify = new Notification(); //创建一个Notification对象
notify.icon = R.drawable.img01;
notify.tickerText = "显示第一个通知";
notify.when = System.currentTimeMillis(); //设置发送时间
notify.defaults = Notification.DEFAULT_ALL; //设置默认声音、默认振动和默认闪光灯
//设置默认声音、默认振动和默认闪光灯
notify.setLatestEventInfo(MainActivity3.this, "无题", "每天进步一点点", null); //设置事件信息(此方法不存在)
notificationManager.notify(1, notify); //通过通知管理器发送通知
//添加第二个通知
Notification notify1 = new Notification(R.drawable.img02, "显示第二个通知", System.currentTimeMillis());
notify1.flags|=Notification.FLAG_AUTO_CANCEL; //打开应用程序后图标消失
Intent intent=new Intent(MainActivity3.this,ContentActivity.class);
PendingIntent pendingIntent=PendingIntent.getActivity(MainActivity3.this, 0, intent, 0);
notify1.setLatestEventInfo(this, "通知", "查看详细内容", pendingIntent); //设置事件信息
notificationManager.notify(2, notify1); //通过通知管理器发送通知
}
});
Button button2 = (Button) findViewById(R.id.button2); //获取“删除通知”按钮
//为“删除通知”按钮添加单击事件监听器
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notificationManager.cancel(1); //清除ID号为常量NOTIFYID_1的通知
notificationManager.cancelAll(); //清除全部通知
}
});
使用AlertDialog创建对话框
AlertDialog类的功能非常强大,它不仅可以生成带按钮的提示对话框,还可以生成带列表的列表对话框,概括起来有以下4种:
[√]带确定、中立和取消等N个按钮的提示对话框,其中的按钮个数不是固定的,可以根据需要添加。例如,不需要中立按钮,则可以生成只带有确定和取消按钮的对话框,也可以是只带有一个按钮的对 话框。
[√]带列表的列表对话框。
[√]带多个单选列表项和N个按钮的列表对话框。
[√]带多个多选列表项和N个按钮的列表对话框
方 法 描述
setTitle(CharSequencetitle) 用于为对话框设置标题
setIcon(Drawableicon) 用于通过Drawable资源对象为对话框设置图标
setIcon(int resId) 用于通过资源ID为对话框设置图标
setMessage(CharSequence message) 用于为提示对话框设置要显示的内容
setButton() 用于为提示对话框添加按钮,可以是取消按钮、中立按钮和确定按钮。需要通过为其指定int类型的whichButton参数实现, 其参数值可以是DialogInterface. BUTTON_POSITIVE(确定按钮)、BUTTON_NEGATIVE(取消按钮)或者 BUTTON_NEUTRAL(中立按钮)
通常情况下,使用AlertDialog类只能生成带N个按钮的提示对话框,要生成另外3种列表对话框,需要使用AlertDialog.Builder类
setTitle(CharSequencetitle) 用于为对话框设置标题
setIcon(Drawableicon) 用于通过Drawable资源对象为对话框设置图标
setIcon(int resId) 用于通过资源ID为对话框设置图标
setMessage(CharSequence message) 用于为提示对话框设置要显示的内容
setNegativeButton() 用于为对话框添加取消按钮
setPositiveButton() 用于为对话框添加确定按钮
setNeutralButton() 用于为对话框添加中立按钮
setItems() 用于为对话框添加列表项
setSingleChoiceItems() 用于为对话框添加单选列表项
setMultiChoiceItems() 用于为对话框添加多选列表项
下面通过一个具体的实例说明如何应用AlertDialog类生成提示对话框和各种列表对话框。
应用AlertDialog类实现带取消、中立和确定按钮的提示对话框,以及带列表、带多个单选列表项和带多个多选列表项的列表对话框。
(1)新建项目的res\layout目录下的布局文件main29.xml,添加4个用于控制各种对话框显示的按钮。由于此处的布局代码比较简单,这里就不再给出。
(2)在主活动MainActivity.java的onCreate()方法中,获取布局文件中添加的第1个按钮,也就是“显示带取消、中立和确定按钮的对话框”按钮,并为其添加单击事件监听器,在重写的onClick()方法中,应用 AlertDialog类创建一个带取消、中立和确定按钮的提示对话框,具体代码如下:
Button button1 = (Button) findViewById(R.id.button1); //获取“显示带取消、中立和确定按钮的对话框”按钮 //为“显示带取消、中立和确定按钮的对话框”按钮添加单击事件监听器
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog alert = new AlertDialog.Builder(MainActivity.this).create();
alert.setIcon(R.drawable.advise); //设置对话框的图标
alert.setTitle("系统提示:"); //设置对话框的标题
alert.setMessage("带取消、中立和确定按钮的对话框!"); //设置要显示的内容
//添加“取消”按钮
alert.setButton(DialogInterface.BUTTON_NEGATIVE,"取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "您单击了取消按钮",Toast.LENGTH_SHORT).show();
}
});
//添加“确定”按钮
alert.setButton(DialogInterface.BUTTON_POSITIVE,"确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "您单击了确定按钮",Toast.LENGTH_SHORT).show();
}
});
alert.setButton(DialogInterface.BUTTON_NEUTRAL,"中立",new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
}
}); //添加“中立”按钮
alert.show(); //显示对话框
}
});
(3)在主活动MainActivity.java的onCreate()方法中,获取布局文件中添加的第2个按钮,也就是“显示带列表的对话框”按钮,并为其添加单击事件监听器,在重写的onClick()方法中,应用AlertDialog类创建一 个带5个列表项的列表对话框,具体代码如下:
Button button2 = (Button) findViewById(R.id.button2); //获取“显示带列表的对话框”按钮
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String[] items = new String[] { "跑步", "羽毛球", "乒乓球", "网球", "体操" };
Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.advise1); //设置对话框的图标
builder.setTitle("请选择你喜欢的运动项目:"); //设置对话框的标题
//添加列表项
builder.setItems(items, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "您选择了" + items[which], Toast.LENGTH_SHORT).show();
}
});
builder.create().show(); //创建对话框并显示
}
});
注意:一定不要忘记builder.create().show();,否则将不能显示生成的对话框。
(4)在主活动MainActivity.java的onCreate()方法中,获取布局文件中添加的第3个按钮,也就是“显示带单选列表项的对话框”按钮,并为其添加单击事件监听器,在重写的onClick()方法中,应用AlertDialog类 创建一个带5个单选列表项和一个“确定”按钮的列表对话框,具体代码如下:
Button button3 = (Button) findViewById(R.id.button3); //获取“显示带单选列表项的对话框”按钮
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String[] items = new String[] { "标准", "无声", "会议", "户外","离线" }; //显示带单选列表项的对话框
Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.advise2); //设置对话框的图标
builder.setTitle("请选择要使用的情景模式:"); //设置对话框的标题
builder.setSingleChoiceItems(items, 0, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "您选择了" + items[which], Toast.LENGTH_SHORT).show(); //显示选择结果
}
});
builder.setPositiveButton("确定", null); //添加“确定”按钮
builder.create().show(); //创建对话框并显示
}
});
(5)在主活动中定义一个boolean类型的数组(用于记录各列表项的状态)和一个String类型的数组(用于记录各列表项要显示的内容),关键代码如下
private boolean[] checkedItems; //记录各列表项的状态
private String[] items; //各列表项要显示的内容
(6)在主活动MainActivity的onCreate()方法中,获取布局文件中添加的第4个按钮,也就是“显示带多选列表项的对话框”按钮,并为其添加单击事件监听器,在重写的onClick()方法中,应用AlertDialog类创建 一个带5个多选列表项和一个“确定”按钮的列表对话框,具体代码如下:
Button button4 = (Button) findViewById(R.id.button4); //获取“显示带多选列表项的对话框”按钮
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkedItems= new boolean[] { false, true, false,true, false }; //记录各列表项的状态
//各列表项要显示的内容
items = new String[] { "植物大战僵尸", "愤怒的小鸟", "泡泡龙", "开心农场", "超级玛丽" };
//显示带单选列表项的对话框
Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.advise2); //设置对话框的图标
builder.setTitle("请选择您喜爱的游戏:"); //设置对话框的标题
builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checkedItems[which]=isChecked; //改变被操作列表项的状态
}
});
//为对话框添加“确定”按钮
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String result=""; //用于保存选择结果
for(int i=0;i<checkedItems.length;i++){
if(checkedItems[i]){
//当选项被选择时
result+=items[i]+"、"; //将选项的内容添加到result中
}
}
//当result不为空时,通过消息提示框显示选择的结果
if(!"".equals(result)){
result=result.substring(0, result.length()-1); //去掉最后面的“、”号
Toast.makeText(MainActivity.this, "您选择了[ "+result+" ]", Toast.LENGTH_LONG).show();
}
}
});
builder.create().show(); //创建对话框并显示 } });