カスタムスタイル

2921 ワード

概要
Notificationの----デフォルトスタイルではandroidの各バージョンで提供されるデフォルトスタイルについて説明し、androidの各バージョンでスタイルをカスタマイズする方法について説明します.
API Level < 16(JB)
この範囲のバージョンでは、高さ64 dpのカスタムviewのみがサポートされています.あなたのlayoutがどんなに高く書いても、最後には64 dpしか表示されません.
 RemoteViews remoteViews = new RemoteViews(mContext.getPackageName(), R.layout.custom_notification);
 remoteViews.setImageViewBitmap(
                R.id.notification_large_icon,
                BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.ic_launcher));
  remoteViews.setTextViewText(R.id.notification_content, "Content");
  remoteViews.setTextViewText(R.id.notification_title, "title");
  SimpleDateFormat format = new SimpleDateFormat("HH:mm");
  remoteViews.setTextViewText(R.id.notification_time, format.format(new Date()));

  builder.setContent(remoteViews);

API Level >= 16(JB) && API Level < 24(N)
このバージョンでは、デフォルト状態64 dpの高さと拡張状態256 dpの高さの2つの高さのカスタムviewがサポートされています.同じ通知に通常の表示と拡張後の表示を設定できます.
拡張:ドロップダウン通知が展開された状態を指します.romによって展開方法が異なる場合があります.
RemoteViews remoteViews = new RemoteViews(mContext.getPackageName(), R.layout.custom_notification);
 remoteViews.setImageViewBitmap(
                R.id.notification_large_icon,
                BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.ic_launcher));
remoteViews.setTextViewText(R.id.notification_content, "Content");
remoteViews.setTextViewText(R.id.notification_title, "title");
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
remoteViews.setTextViewText(R.id.notification_time, format.format(new Date()));

builder.setContent(remoteViews);

RemoteViews remoteViewBig = new RemoteViews(mContext.getPackageName(), R.layout.custom_notification_big);
notification = builder.build();
notification.bigContentView = remoteViewBig;

notificationのbigContentView変数を使用して、拡張された表示内容を設定します.
API Level >= 24(N)
Nでは、拡張後のコンテンツをnotificationのbigContentView変数で任意に設定ことができるが、この属性は@Deprecated、notificationとしてマークする.bigContentView = remoteViewBig. bigContentViewを設定するには、他の推奨方法を使用します.v 4パッケージ、version 24バージョンのNotificationCompat.BuilderにはsetCustomBigContentViewのメソッドが追加されました
RemoteViews remoteViewBig = new RemoteViews(mContext.getPackageName(), R.layout.custom_notification_big);
builder.setCustomBigContentView(remoteViewBig);

これでbigContentViewを設定できます.Notificationの----デフォルトスタイルから分かるように、バージョンNでは、システムのデフォルトの通知欄のスタイルと高さ(高くなる)が変更されており、具体的な高さは不明ですが、以前のデフォルトの高さより大きいはずです(>64 dp).そこでdemoを書いたところ、bigcontentviewが設定されているとbigcontentviewしか表示されず、Nで新しく変更されたのかどうかはわかりませんが、筆者は後で検討して結果を出しますので、読者が答えを知っていたら教えてください~
最後に
github demoダウンロード
関連読書
Notificationの----endroid 5.0実現原理(二)Notificationの----Android 5.0実現原理(一)Notificationの---NotificationListenerServices 5.0実現原理Notificationの----デフォルトスタイルNotificationの----タスクスタック