RemoteViews只支持部分布局和控件
当我们自定义通知布局的时候,需要通过NotificationCompat.Builder
设置自定义的RemoteViews
。而RemoteViews
中只支持部分布局和控件。如下所示。
布局
android.widget.AdapterViewFlipper
android.widget.FrameLayout
android.widget.GridLayout
android.widget.GridView
android.widget.LinearLayout
android.widget.ListView
android.widget.RelativeLayout
android.widget.StackView
android.widget.ViewFlipper
控件
android.widget.AnalogClock
android.widget.Button
android.widget.Chronometer
android.widget.ImageButton
android.widget.ImageView
android.widget.ProgressBar
android.widget.TextClock
android.widget.TextView
注意:上面的信息我是在android-29的RemoteViews
源码中看到的,其他版本的像
android-26,android-27都没看到,感觉很奇怪。
自定义通知栏的展开布局和收起布局
在上面说通过NotificationCompat.Builder
设置自定义的RemoteViews
。有两个方法。
设置通知收起状态RemoteViews
public Builder setCustomContentView(RemoteViews contentView) {
mContentView = contentView;
return this;
}
设置通知展开状态的RemoteViews
public Builder setCustomBigContentView(RemoteViews contentView) {
mBigContentView = contentView;
return this;
}
下面看一下网易云和喜马拉雅通知布局的对比。
通知栏网易云展开布局,喜马拉雅收起布局

通知栏网易云展开布局,喜马拉雅展开布局

通知栏喜马拉雅展开布局,网易云收起布局

通知栏喜马拉雅展开布局,网易云展开布局

自定义通知栏高度
在官方的创建自定义通知布局中有这么一段话。“自定义通知布局的可用高度取决于通知视图。通常情况下
,收起后的视图布局的高度上限为 64 dp,展开后的视图布局的高度上限为 256 dp”。
对这段话我的理解是:
- 自定义通知的收起布局高度可定制,通常情况下不要超过64dp,超过64dp会以实际高度显示。
- 自定义通知的收起布局高度可定制,通常情况下不要超过256dp,超过256dp会以实际高度显示。
接下来我们测试一下,测试机器
- HUAWEI LLD-AL00,Android版本9
收起布局32dp,展开布局128dp,效果如下所示
收起布局效果

展开布局效果



收起布局64dp,展开布局256dp,效果如下所示
收起布局效果

展开布局效果



到这里,有个疑问,如果收起布局大于64dp,展开布局大于256dp会是什么效果呢?接续测试一下。
收起布局100dp,展开布局300dp,效果如下所示
收起布局效果

展开布局效果



在我的测试机上好像也没什么问题,就是我们的通知布局占据的高度变大了。
结论:可以自定义通知栏高度,但是无论是收起布局还是展开布局都不宜过大。过大的话,会导致用户在通知栏看到的通知数量减少,用户需要滑动才能看到更多的通知信息,影响用户体验。
源码请参考NotificationDemo的CustomizeNotificationActivity。
参考链接:
网友评论