2017-04-10 119 views
1

我正在構建基於Google's Universal Media Player的媒體播放器應用程序。現在我面臨着玩家創建通知的問題。無法更改NotificationCompat MediaStyle文本顏色

代碼來創建通知:

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(mService); 

notificationBuilder 
      .setStyle(new NotificationCompat.MediaStyle() 
       .setShowActionsInCompactView(
         new int[]{playPauseButtonPosition}) // show only play/pause in compact view 
       .setMediaSession(mSessionToken)) 
      .setColor(mNotificationColor) 
      .setSmallIcon(R.drawable.ic_notification) 
      .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) 
      .setUsesChronometer(true) 
      .setContentIntent(createContentIntent(description)) 
      .setContentTitle(description.getTitle()) 
      .setContentText(description.getSubtitle()) 
      .setLargeIcon(art); 

該代碼使得以下通知: enter image description here

之後我從代碼去除.setColor(mNotificationColor)部。我認爲它使通知的背景變成了白色。但現在背景變成這樣的灰色: enter image description here

所以現在我想將背景顏色設置爲白色,這是很容易的部分。 setColor可以完成這項工作,但那時我想讓文字顏色變黑。無法弄清楚如何改變文字顏色。即使我提供黑色圖標也不會改變播放/暫停的圖標。

enter image description here

回答

0

嘗試一些像這樣的自定義通知:

當您使用的通知,並通過內置的方式設置文本,以下行創建佈局:

RemoteViews contentView = new RemoteViews(context.getPackageName(), 
      com.android.internal.R.layout.status_bar_latest_event_content); 

的上述佈局包含以下視圖,它負責查看通知文本:

<TextView android:id="@+id/text" 
    android:textAppearance="@style/TextAppearance.StatusBar.EventContent" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:singleLine="true" 
    android:ellipsize="marquee" 
    android:fadingEdge="horizontal" 
    android:paddingLeft="4dp" /> 

所以得出的結論是,需要的風格是TextAppearance.StatusBar.EventContent,它的定義是這樣的:

<style name="TextAppearance.StatusBar.EventContent"> 
    <item name="android:textColor">#000000</item> 
</style> 

這裏有一些參考。 希望這能解決你的問題。

Link1

Link2

+0

我加'<樣式名稱= 「TextAppearance.AppCompat.Notification.Title.Media」 工具:倍率= 「真」> <項目名稱= 「機器人:文字顏色」> @ color/app_primary_text '因爲這是我在[源代碼]中找到的樣式名稱(https://github.com/android/platform_frameworks_support/blob/master/v7/appcompat/res/layout/notification_template_lines_media.xml )。但沒有任何反應。文字顏色仍然是白色。 – Ratul

+0

使用工具:override =「true」的原因是:_overriding @ style/TextAppearance_AppCompat_Notification_Title_Media在com.android.support:appcompat-v7中標記爲private。如果有意,使用工具:override =「true」,否則選擇一個不同的名字。 私人資源不應被引用;可能並不是到處都有,甚至它們可能在沒有通知的情況下消失。 要解決這個問題,請將資源複製到您自己的項目中,而不是在覆蓋時使用。 – Ratul

+0

什麼是您的最小sdk和您測試過哪個設備。 – 2017-04-10 13:27:13