如何在android N之后获取通知背景颜色

时间:2018-03-11 03:09:11

标签: android colors notifications background

我想定义通知用户界面,因为在某些手机中,通知背景颜色为白色,而在其他手机中则为黑色。我想检查什么是背景颜色,以便选择不同的布局。

在Android N之前,我的代码就像这个类:

https://github.com/lizixian18/MusicLibrary/blob/master/musiclibrary/src/main/java/com/lzx/musiclibrary/notification/NotificationColorUtils.java#isDarkNotificationBar

原则是检查默认的contentView标题和内容TextView颜色。但在android N之后,默认contentViewnull

通知#构建:

public Notification build() {

    if (mContext.getApplicationInfo().targetSdkVersion < Build.VERSION_CODES.N
            && (useExistingRemoteView())) {
        if (mN.contentView == null) {
            mN.contentView = createContentView();
            mN.extras.putInt(EXTRA_REBUILD_CONTENT_VIEW_ACTION_COUNT,
                    mN.contentView.getSequenceNumber());
        }
        if (mN.bigContentView == null) {
            mN.bigContentView = createBigContentView();
            if (mN.bigContentView != null) {
                mN.extras.putInt(EXTRA_REBUILD_BIG_CONTENT_VIEW_ACTION_COUNT,
                        mN.bigContentView.getSequenceNumber());
            }
        }
        if (mN.headsUpContentView == null) {
            mN.headsUpContentView = createHeadsUpContentView();
            if (mN.headsUpContentView != null) {
                mN.extras.putInt(EXTRA_REBUILD_HEADS_UP_CONTENT_VIEW_ACTION_COUNT,
                        mN.headsUpContentView.getSequenceNumber());
            }
        }
    }

    if ((mN.defaults & DEFAULT_LIGHTS) != 0) {
        mN.flags |= FLAG_SHOW_LIGHTS;
    }
    return mN;
}

所以我的问题是:在Android N之后如何检查通知背景颜色是暗还是白?

1 个答案:

答案 0 :(得分:0)

建议您在通知文字上设置自定义颜色。相反,您应该使用TextAppearance.Compat.Notification styles作为文字:

  • TextAppearance.Compat.Notification用于通知中的常规文字
  • 标题样式
  • TextAppearance.Compat.Notification.Title
  • TextAppearance.Compat.Notification.Info(或Line2)用于辅助文字

这些样式自动具有内置的正确颜色。

对于媒体应用,就像你提到的那样,应该使用NotificationCompat.MediaStyle构建通知,这也会考虑正确的背景和文本颜色。