39

この単純なコードを使用して、Android4.1以降で通知を設定しました。それはうまく機能しますが、私の問題はSmallIconとLargeIconにあります。SmallIconがステータスバーに表示され、LargeIconがドロップダウンリストに表示されることを理解しました。

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をサイズ変更せずに表示するのではなく、トリミングされた特大のSmallアイコンが「TheTicker」テキストの横に表示されます。 ここに画像の説明を入力してください

  2. ドロップダウンリストの左側にLargeIconが表示されていますが、これは良いことです。ただし、右側の通知時刻の横にある小さなアイコンも表示されます。私はそれを見せたくありません。 ここに画像の説明を入力してください

4

5 に答える 5

30
  1. 私のアプリケーションでは、小さなアイコンとして描画可能な大きな(128x128ピクセル)PNGを提供し、トリミングせずに拡大縮小して表示します。ドローアブルはビットマップファイルで定義されていますか、それともXMLリソースとして定義されていますか?XMLでは、表示のいくつかの側面(トリミングなど)を指定できます。XMLを再確認するか、PNG/JPGのみを使用してください。

  2. Notification.setSmallIcon()のAndroid APIドキュメントには、次のように明確に記載されています。

    ステータスバーで通知を表すために使用される小さなアイコンリソースを設定します。拡大表示のプラットフォームテンプレートは、大きなアイコンも指定されていない限り、このアイコンを左側に描画します。指定されている場合、小さなアイコンは右側に移動します

( Notification.setContent()を介して独自の通知テンプレートを提供しない限り、動作をオーバーライドする方法はありません。

于 2013-01-11T14:48:10.957 に答える
14

この奇妙な実装を回避する方法があります。使用する代わりにsetLargeIconこれを使用してください:

Notification notification=notificationBuilder.build()
notification.contentView.setImageViewResource(android.R.id.icon, R.drawable.your_large_icon);
于 2014-12-27T04:51:50.740 に答える
8

これは予想される動作だと思います。

小さいアイコンがアイコンサイズのUXガイドラインに従っていることを確認する必要があります。小さなアイコンは24x24dpに制限されています。

展開された通知のデフォルトの動作は、大きいアイコンと小さいアイコンの両方を表示することです。小さなアイコンを取り除く方法があるかどうかはわかりませんが、なぜこれが重要なのでしょうか。

于 2012-12-12T20:18:29.810 に答える
1

私の場合、赤いアイコンを大きなアイコンとして設定し、setColorをColor.WHITEに設定し、白いアイコンを小さなアイコンとして設定しました。そうすると、通知領域に赤いアイコンが表示され、白いアイコンが「消える」ようになります。

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

mBuilder.setContentIntent(resultPendingIntent).setColor(Color.WHITE).setLargeIcon(icon);
于 2017-06-01T19:44:47.147 に答える
-1

私の場合、すべてのフォルダー(xhdpi、hdpi、mdpi、ldpi)にアイコン画像を配置していませんでした。

于 2013-12-21T13:58:04.630 に答える