我目前正在研究Android Support Package v4 Rev 10的NotificationCompat功能。documentation表示'setContentText()'显示通知中的第二行。这适用于API 8直到API 15.但是,如果我尝试在API 16中使用此方法,我的通知将错过第二行。我只看到标题而不是第二行。添加多行是没有问题的(使用'addline()')。
这是我用过的NotificationCompat.Builder的代码:
private NotificationCompat.Builder buildNormal(CharSequence pTitle) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(
getSherlockActivity());
builder.setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL);
// set the shown date
builder.setWhen(System.currentTimeMillis());
// the title of the notification
builder.setContentTitle(pTitle);
// set the text for pre API 16 devices
builder.setContentText(pTitle);
// set the action for clicking the notification
builder.setContentIntent(buildPendingIntent(Settings.ACTION_SECURITY_SETTINGS));
// set the notifications icon
builder.setSmallIcon(android.R.drawable.stat_sys_download_done);
// set the small ticker text which runs in the tray for a few seconds
builder.setTicker("This is your ticker text.");
// set the priority for API 16 devices
builder.setPriority(Notification.PRIORITY_DEFAULT);
return builder;
}
如果我想添加多行并显示通知,我会使用以下代码:
NotificationCompat.Builder normal = buildNormal("This is an Expanded Layout Notification.");
NotificationCompat.InboxStyle big = new NotificationCompat.InboxStyle(
normal);
// summary is below the action
big.setSummaryText("this is the summary text");
// Lines are above the action and below the title
big.addLine("This is the first line").addLine("The second line")
.addLine("The third line").addLine("The fourth line");
NotificationManager manager = getNotificationManager(normal);
manager.notify(Constants.NOTIFY_ID, big.build());
这是Jelly Bean的想要功能,setContentText被忽略还是我错过了什么?代码在所有版本上运行且没有错误,但我想添加第二行,使用与ICS或更早版本相同的代码。
我还添加了两个截图。第一个来自我的ICS 4.0.3华为MediaPad,第二个来自Galaxy Nexus和4.1.1。 1的第二行是为了简单起见,它与通知标题的字符串相同。它在2上不可见。
提前感谢您的帮助!
答案 0 :(得分:7)
这是Jelly Bean的想要功能,setContentText会被忽略还是我错过了什么?
setContextText()
的值应该在折叠状态下可见(例如,展开时双指向上滑动,或者不是最顶层的Notification
)。鉴于上面的代码,它将在展开状态下由NotificationCompat.InboxStyle
替换。
答案 1 :(得分:1)
如果要显示默认扩展状态的通知。只需设置构建器的PRIORITY_MAX即可。 像: builder.setPriority(Notification.PRIORITY_MAX);
答案 2 :(得分:0)
我现在用@ CommonsWare的帮助解决了这个问题并创建了一个简单的方法,它将检查当前的API级别并决定应该使用什么命令:
private void createCompatibleSecondLine(CharSequence pTitle,
NotificationCompat.Builder pBuilder, InboxStyle pInboxStyle) {
// set the text for pre API 16 devices (or for expanded)
if (android.os.Build.VERSION.SDK_INT < 16) {
pBuilder.setContentText(pTitle);
} else {
pInboxStyle.setSummaryText(pTitle);
}
}
所以这没什么大不了的,远非完美,但它确实适合我。我们随时欢迎改进:)