创建定制化的通知布局
默认情况下,在通知窗口显示的通知包括标题和消息文本。这两项内容使用通过setLatestEventInfo()方法的contentTitle和contentText参数来定义的。但是,你也能够使用RemoteViews类给通知定义一个定制化的布局。如图3所示就是一个定制的通知布局的例子。它看上去与默认的通知类似,但是实际上它是用一个定制的XML布局来创建的。
图3.带有定制化布局的通知。
要给通知创建自己的布局,就要实例化一个RemoteViews对象,用它来填充一个定制的布局文件,然后把RemoteViews对象传递给通知的contentView属性字段。
下面用一个例子来更好的理解如何创建定制化的通知:
1.给通知创建XML布局,如以下在custom_notification.xml文件中定义的通知布局:
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp">
<ImageViewandroid:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_marginRight="10dp"/>
<TextViewandroid:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
style="@style/NotificationTitle"/>
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
android:layout_below="@id/title"
style="@style/NotificationText"/>
</RelativeLayout>
我们注意到,两个TextView元素都包含了style属性,给定制的通知中的文本使用样式资源是至关重要的,因为通知的背景色在不同设备和平台版本中会有所差异。从Android2.3(API级别9)开始,系统给默认的通知布局所使用的文本定义了样式,这样你就应该在Android2.3或更高的版本上运行时使用样式,以便确保文本针对背景是可见的。
例如,要在比Android2.3低的版本上使用标准的文本色,应该使用下列样式(res/values/styles.xml):
<?xml version="1.0"encoding="utf-8"?>
<resources>
<stylename="NotificationText">
<itemname="android:textColor">?android:attr/textColorPrimary</item>
</style>
<stylename="NotificationTitle">
<itemname="android:textColor">?android:attr/textColorPrimary</item>
<itemname="android:textStyle">bold</item>
</style>
<!-- If you want a slightly different color for some text,
consider using ?android:attr/textColorSecondary -->
</resources>
如果要在Android2.3以上的版本上给通知应用系统默认的颜色,就要使用以下样式(res/values-v9/styles.xml):
<?xml version="1.0"encoding="utf-8"?>
<resources>
<stylename="NotificationText"parent="android:TextAppearance.StatusBar.EventContent"/>
<stylename="NotificationTitle"parent="android:TextAppearance.StatusBar.EventContent.Title"/>
</resources>
现在,在Android2.3(API级别9)或更高的版本上运行时,在自己定制的View对象中的文本会使用与系统给默认的通知相同的颜色。这是重要的,因为Android的后续版本实际上把通知的背景色改变成深色的。继承系统的样式,确保文本会高亮显示,而且,如果背景是其他的不期望的颜色,那么文本也要做适当的改变。
2.现在,在应用程序的代码中,使用RemoveViews类的方法来定义图片和文本,然后把RemoteView对象传递给通知的contentView属性字段,如下例所示:
RemoteViewscontentView=newRemoteViews(getPackageName(),R.layout.custom_notification_layout);
contentView.setImageViewResource(R.id.image,R.drawable.notification_image);
contentView.setTextViewText(R.id.title,"Custom
notification");
contentView.setTextViewText(R.id.text,"This
is a custom layout");
notification.contentView=contentView;
如上例所示,把应用程序的包名和布局资源ID传递给RemoteViews类的构造器,然后,使用setImageViewResource()和setTextViewText()方法,给ImageView和TextView对象定义内容。在每个语句中,都要把你设置的适当的View对象的引用ID连同设置给View对象的值一起作为参数传递给这两个方法。最后RemoteViews对象被传给Notification对象镇南关的contentView属性字段。
3.因为在使用定制化的View对象时,不需要setLatestEventInfo()方法,就必须用contentIntent字段给通知定义Intent对象,如下例所示:
Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.contentIntent = contentIntent;
4.使用通常的方法发送通知:
mNotificationManager.notify(CUSTOM_VIEW_ID, notification);
Remote类还包含了容易把计时器或进度条添加到通知布局中的方法。有关给通知创建定制布局的更多信息,可参照RemoteViews类。
警告:在创建定制化的通知布局时,必须特别小心,以确保定制化的布局在不同的方向和分辨率的设备中能够正常的运行。尽管这个建议适用于在Android中创建的所有View对象布局,但是在这个场景中尤其重要,因为布局的实际空间非常受限,因此不要让定制的布局太复杂,并且要在各种配置中做好测试。
分享到:
相关推荐
通知是一个可以在应用程序正常的用户界面之外显示给用户的消息。 通知发出时,它首先出现在状态栏的通知区域中,用户打开通知抽屉可查看通知详情。通知区域和通知抽屉都是用户可以随时查看的系统控制区域。
� 由于采用了 Java 作为应用开发语言,目前可用的传统第三方应用还很少,但由于 Android 是一款完全 开 源的移动计算平台,相信第三方应用会很快的丰富起来。 � Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的...
我们在做Android开发的时候经常会遇到后台线程执行的比如说下载文件的时候,这个时候我们希望让客户能看到后台有操作进行,这时候我们就可以使用进度条,那么既然在后台运行,为的就是尽量不占用当前操作空间,用户可能...
过一段时间后该通知消失,同时在状态栏上显示代表该登录状态的图标(如图) 将状态栏下拉可以看到状态的详细信息(如图) 单击”更改登录状态”按钮,将显示通知列表。单击”退出”按钮,可以删除该通知。 具体实现...
52_发送状态栏通知.avi 所在项目:Notification 53_采用网页设计软件界面.avi 所在项目:htmlUI 54_tween动画.avi 所在项目:tween 55_frame动画的实现.avi 所在项目:frameAnimation 56_activity切换动画与页面...
19、Notification 状态栏通知 20、GridView、ImageSwitcher 21、SmsManager 消息管理器,发短信(这里是模拟器只能给其它模拟器发短信) 22、Intent Action、Category属性 测试 23、系统 Action、Category属性 24...
状态栏图标用于应用程序在状态栏中的通知。 Tab图标 Tab 图标用来表示在一个多选项卡界面的各个选项的图形元素。 对话框图标 对话框图标是在弹出框中显示,增加互动性。 列表视图图标 使用列表视图图标是用图形表示...
5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用 5.9 搜索手机通讯录自动完成——使用ContentResolver 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源管理...
5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用 5.9 搜索手机通讯录自动完成——使用ContentResolver 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源管理...
5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用 5.9 搜索手机通讯录自动完成——使用ContentResolver 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源管理...
状态栏通知,带播放控件 锁定屏幕小部件 - 在设备锁定时控制您的歌曲 插入/取出耳机时自动检测 版本和设备支持 在联想、三星和 Techno 设备上进行了测试。 我相信它应该适用于大多数运行 Android API Level 3 ...
5.8 状态栏的图标与文字提醒 5.9 搜索手机通讯录自动完成 5.10 取得联系人资料 5.11 制作有图标的文件资源管理器 5.12 还原手机默认桌面 5.13 置换手机后台图 5.14 获取手机现存桌面 5.15 ...
3.6.3 秘诀25:在状态栏中显示通知 62 第4 章 用户界面布局 65 4.1 资源目录及其基本属性 65 4.2 view 和viewgroup 67 4.2.1 秘诀27:利用eclipse 编辑器生成布局 68 4.2.2 秘诀28:控制ui 元素的宽度和高度 71...
19、Notification 状态栏通知 20、GridView、ImageSwitcher 21、SmsManager 消息管理器,发短信(这里是模拟器只能给其它模拟器发短信) 22、Intent Action、Category属性 测试 23、系统 Action、Category属性 24...
状态栏 屏幕最上面的栏,包含几个图标,如信号。 锁屏 当您按下电源按钮时所看到的。 锁屏小部件 显然在 Android 5 中删除了。 吐司 通知历史 通知 将数据传输到 SD 卡通知 禁用: 应用程序更新通知 禁用: 新的语音...
5.8 状态栏的图标与文字提醒 200 5.9 搜索手机通讯录自动完成 203 5.10 取得联系人资料 207 5.11 制作有图标的文件资源管理器 210 5.12 还原手机默认桌面 215 5.13 置换手机后台图 217 5.14 获取...
52_发送状态栏通知.avi 所在项目:Notification 53_采用网页设计软件界面.avi 所在项目:htmlUI 54_tween动画.avi 所在项目:tween 55_frame动画的实现.avi 所在项目:frameAnimation 56_activity切换动画与页面...
Android 2021 版本引入了全新的用户界面设计,采用了更加现代和直观的设计语言。无论是动画效果、过渡效果还是图标设计,都经过了精心优化,使得整体界面更加美观、响应更加迅速。此外,智能分类的通知栏、强大的多...