第48页
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(); //显示消息提示框
运行本实例,首先显示如图4.14所示的消息提示框,过一段时间后,该消息提示框消失,然后显示如图4.15所示的消息提示框,再过一段时间,该消息提示框也自动显示消息。
图4.14 消息提示框(一) 图4.15 消息提示框(二)
4.2.2 使用Notification在状态栏上显示通知
在使用手机时,当有未接来电或是新短消息时,手机会给出相应的提示信息,这些提示信息通常会显示到手机屏幕的状态栏上。Android也提供了用于处理这些信息的类,它们是Notification和NotificationManager。其中,Notification代表的是具有全局效果的通知;而NotificationManager则是用于发送Notification通知的系统服务。
使用Notification和NotificationManager类发送和显示通知也比较简单,大致可以分为以下4个步骤。
(1)调用getSystemService()方法获取系统的NotificationManager服务。
(2)创建一个Notification对象,并为其设置各种属性。
(3)为Notification对象设置事件信息。
(4)通过NotificationManager类的notify()方法发送Notification通知。
下面通过一个具体的实例说明如何使用Notification在状态栏上显示通知。
例4.12 在Eclipse中创建Android项目,名称为4.12,实现在状态栏上显示通知和删除通知。(实例位置:光盘\TM\sl\4\4.12)
(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的TextView组件删除,然后添加两个普通按钮,一个用于显示通知,另一个用于删除通知。由于此处的布局代码比较简单,这里就不再给出。
(2)在主活动MainActivity.java的onCreate()方法中,调用getSystemService()方法获取系统的NotificationManager服务,关键代码如下:
//获取通知管理器,用于发送通知
final NotificationManager notificationManager =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
(3)获取“显示通知”按钮,并为其添加单击事件监听器,在重写的onClick()方法中,首先通过无参的构造方法创建一个Notification对象,并设置其相关属性,然后通过通知管理器发送该通知,接下来通过构造方法Notification(int icon, CharSequence tickerText, long when)创建一个通知,并为其设置事件信息,最后通过通知管理器发送该通知,具体代码如下:
Button button1 = (Button) findViewById(R.id.button1); //获取“显示通知”按钮
//为“显示通知”按钮添加单击事件监听器
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Notification notify = new Notification(); //创建一个Notification对象
notify.icon = R.drawable.advise;
notify.tickerText = "显示第一个通知";
notify.when = System.currentTimeMillis(); //设置发送时间
notify.defaults = Notification.DEFAULT_ALL; //设置默认声音、默认振动和默认闪光灯
notify.setLatestEventInfo(MainActivity.this, "无题", "每天进步一点点", null); //设置事件信息
notificationManager.notify(NOTIFYID_1, notify); //通过通知管理器发送通知
//添加第二个通知
Notification notify1 = new Notification(R.drawable.advise2,
"显示第二个通知", System.currentTimeMillis());
notify1.flags|=Notification.FLAG_AUTO_CANCEL; //打开应用程序后图标消失
Intent intent=new Intent(MainActivity.this,ContentActivity.class);
PendingIntent pendingIntent=PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
notify1.setLatestEventInfo(MainActivity.this, "通知",
"查看详细内容", pendingIntent); //设置事件信息
notificationManager.notify(NOTIFYID_2, notify1); //通过通知管理器发送通知
}
});
注意: 上面代码中加粗的部分,用于为第一个通知设置使用默认声音、默认振动和默认闪光灯。也就是说,程序中要访问系统闪光灯和振动器,需要在AndroidManifest.xml中声明使用权限,具体代码如下: