2012-12-12 20 views
36

我用這個簡單的代碼在Android 4.1或更高版本中設置通知。 它運行良好,但我的問題來自SmallIcon和LargeIcon。 我知道SmallIcon顯示在狀態欄中,LargeIcon顯示在下拉列表中。NotificationCompat 4.1 SetSmallIcon和SetLargeIcon

NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
builder.setTicker("The ticker"); 
builder.setContentTitle("The title"); 
builder.setContentText("The text"); 
builder.setSmallIcon(R.drawable.my_small_icon); 
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.my_96px_large_icon); 
builder.setLargeIcon(bm);  
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
nm.notify("direct_tag", NOTIF_ALERTA_ID, builder.build()); 

我的問題是:

  1. 在通知啓動時,裁剪過大的小圖標顯示未來的「北京時間」的文字來,而不是顯示無尺寸過它的原始SmallIcon。 enter image description here

  2. 在下拉列表中,我看到LargeIcon在左邊,這很好。但是我也看到通知時間旁邊的小圖標。我不想表明這一點。 enter image description here

+0

我有困難解決這個問題,你有什麼機會可以澄清什麼是必要的?接受的答案並不完全告訴我該怎麼做 –

+0

@AndrewBullock - 做builder.setSmallIcon(0);'爲你工作?當使用大圖標時,它應該禁用小圖標。 – tomash

回答

27
  1. 在我的應用程序中,我提供大的(128x128像素)PNG可繪製爲小圖標,並且它顯示縮放和無裁剪。您的drawable是在位圖文件中定義的,還是作爲XML資源定義的?在XML中,您可以指定顯示的幾個方面(例如裁剪)。仔細檢查你的XML或只使用PNG/JPG。

  2. 由於Android API documentation on Notification.setSmallIcon()明確規定:

    設置小圖標資源,這將被用來代表在狀態欄中的通知。展開視圖的平臺模板將在左側繪製此圖標,除非還指定了大圖標,則在這種情況下,小圖標將移動到右側

AFAIK有沒有辦法,你可以重寫的行爲,除非你提供自己的通知模板(通過Notification.setContent()

9

我猜想這是預期的行爲。

您應該檢查一下,看看您的小圖標是否符合用戶體驗圖標大小的指導原則。小圖標僅限於24x24dp。

擴展通知的默認行爲是顯示大圖標和小圖標。我不確定是否有辦法擺脫小圖標,但爲什麼這很重要?

+1

這很重要,因爲我的應用程序是唯一一個顯示該時間旁邊的小圖標的應用程序。 – Ton

+0

我在我的應用程序中使用了我一直使用的相同LARGE圖標,並將我的SMALL圖標縮小到24x24dp(例如24 x 24像素)。因爲我看不到其他地方,所以非常感謝你的大小。 – 2013-05-03 20:25:24

+1

UX指南在哪裏? –

-1

在我來說,我沒有放置圖標圖像中的所有文件夾(xhdpi,華電國際, MDPI,LDPI)

15

周圍有這種怪異的實施方式,而不是使用setLargeIcon使用這樣的:。

Notification notification=notificationBuilder.build() 
notification.contentView.setImageViewResource(android.R.id.icon, R.drawable.your_large_icon); 
+0

好戲。它繞過用於小型和大型圖標交互的機器,並在通知構建完成後修改imageview。 – GregD

+0

已棄用。但顯然你可以改用NotificationCompat.Builder.setCustomContentView(RemoteViews)。 – Swindler

0

就我而言,我只是將我的紅色圖標設置爲大圖標,將setColor設置爲Color.WHITE,並將白色圖標設置爲我的小圖標。這樣,在通知區域,我的紅色圖標顯示,白色圖標「消失」。

Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.app_logo); 

mBuilder.setContentIntent(resultPendingIntent).setColor(Color.WHITE).setLargeIcon(icon);