为什么果冻豆在通知中显示第二行?

我目前正在研究Android Support Package v4 Rev 10的NotificationCompatfunction。 文档说'setContentText()'显示通知中的第二行。 API 6到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()); 

这是果冻豆的一个想要的function,setContentText被忽略,或者我错过了什么? 该代码在所有版本上运行没有错误,但我想添加与ICS或更早版本使用相同的代码的第二行。

我还添加了两个截图。 第一个是我的ICS 4.0.3华为MediaPad,第二个是Galaxy Nexus的4.1.1。 从1开始的第二行是为了简化与通知标题相同的string。 2号不可见。

感谢您的帮助提前!

ICS 4.0.3设备果冻豆4.1.1设备

Solutions Collecting From Web of "为什么果冻豆在通知中显示第二行?"

这是果冻豆的一个想要的function,setContentText被忽略,或者我错过了什么?

setContextText()的值应该在折叠状态下可见(例如,如果展开的话双指向上滑动,或者不是最上面的Notification )。 在扩展状态下,它将被replace为NotificationCompat.InboxStyle ,给定你的代码。

如果你想通过默认扩展状态显示通知,只需设置构build器的PRIORITY_MAX即可。 如:builder.setPriority(Notification.PRIORITY_MAX);

我现在用@ CommonsWare的帮助解决了这个问题,并创build了一个简单的方法,它将检查当前的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); } } 

所以这没什么大不了的,但是它为我做了这个工作。 总是欢迎改进:)