创build自定义大通知

我想创build一个包含一些控件的通知。 由于文本和控件很小,默认通知大小(64dp),我希望它大于默认大小。
有可能创build更大的通知,我认为也可以有一个自定义的布局,但我不知道如何。

更具体地说,以下屏幕截图显示了来自spotify的通知(从这里获取的图像): Spotify通知

正如你所看到的,尺寸比默认值大。 此外,它有一些没有文本的ImageButtons – 如果你使用Notification.Builder.addAction() ,你可以提供一个图标,但也需要提供一个CharSequence作为描述 – 如果你留下描述为空,仍然会有空间为文本保留,如果你传递null ,它会崩溃。

任何人都可以告诉我如何创build一个自定义布局的大通知?

谢谢

Solutions Collecting From Web of "创build自定义大通知"

由于API更改而更新:

Notification.Builder从API 24开始,包含一个setCustomBigContentView(RemoteViews)方法。 此外, NotificationCompat.Builder (它是support.v4包的一部分)包含此方法。
请注意, NotificationCompat.Builder.setCustomBigContentView的文档指出:

提供自定义的RemoteViews来代替展开forms的平台模板。 这将覆盖本构build器对象构build的扩展布局。 在JELLY_BEAN之前的版本上没有运行。

因此,这也只适用于API> = 16(JELLY_BEAN)。


原始答复

所以谷歌过度使用后,我发现本教程解释如何使用自定义大布局。 诀窍不是使用setStyle()而是在构build Notification 之后手动设置bigContentView字段。 似乎有点哈克,但这是我终于想出了:

notification_layout_big.xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="100dp" <!-- This is where I manually define the height --> android:orientation="horizontal" > <!-- some more elements.. --> </LinearLayout> 

在代码中build立Notification

 Notification foregroundNote; RemoteViews bigView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notification_layout_big); // bigView.setOnClickPendingIntent() etc.. Notification.Builder mNotifyBuilder = new Notification.Builder(this); foregroundNote = mNotifyBuilder.setContentTitle("some string") .setContentText("Slide down on note to expand") .setSmallIcon(R.drawable.ic_stat_notify_white) .setLargeIcon(bigIcon) .build(); foregroundNote.bigContentView = bigView; // now show notification.. NotificationManager mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotifyManager.notify(1, foregroundNote); 

编辑
正如chx101所指出的,这只适用于API> = 16。我没有在这个答案中提到它,但是在上面给出的链接教程中提到了它:

扩展通知首先在Android 4.1 JellyBean [API 16]中引入。