あなたが含ま大判通知を生成するために、すべてのこの
ヘルパークラスを通過しない場合、エンドNotification.javaで
private ArrayList<CharSequence> mTexts = new ArrayList<CharSequence>(5);
あるラインとその下の説明を確認してください(最大5つの)文字列のリスト
プラットフォームで大きな形式の通知が提供されない場合、この方法は効果がありません。ユーザーは通常の通知ビューを常に表示します。 このクラスは、「再建」である:それは、ビルダーオブジェクトにアタッチし、その動作を変更するので、同じよう:
Notification noti = new Notification.Builder() .setContentTitle("5 New mails from " + sender.toString()) .setContentText(subject) .setSmallIcon(R.drawable.new_mail) .setLargeIcon(aBitmap) .setStyle(new Notification.InboxStyle() .addLine(str1) .addLine(str2) .setContentTitle("") .setSummaryText("+3 more")) .build();
これは、その文書で述べているものです。
ドキュメントの全体像が欠落しています。次のコードで通知を表示します。
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);`
notificationManager.notify(1 /* ID of notification */, notificationBuilder.build());
ここに、NotificationCompat.builderのnotifyコードがあります。IMPL私はJellyBean Iを使用しているため
static {
if (Build.VERSION.SDK_INT >= 21) {
IMPL = new NotificationCompatImplApi21();
} else if (Build.VERSION.SDK_INT >= 20) {
IMPL = new NotificationCompatImplApi20();
} else if (Build.VERSION.SDK_INT >= 19) {
IMPL = new NotificationCompatImplKitKat();
} else if (Build.VERSION.SDK_INT >= 16) {
IMPL = new NotificationCompatImplJellybean();
} else if (Build.VERSION.SDK_INT >= 14) {
IMPL = new NotificationCompatImplIceCreamSandwich();
} else if (Build.VERSION.SDK_INT >= 11) {
IMPL = new NotificationCompatImplHoneycomb();
} else if (Build.VERSION.SDK_INT >= 9) {
IMPL = new NotificationCompatImplGingerbread();
} else {
IMPL = new NotificationCompatImplBase();
}
として
private static final NotificationCompatImpl IMPL;
interface NotificationCompatImpl {
public Notification build(Builder b, BuilderExtender extender);
public Bundle getExtras(Notification n);
public int getActionCount(Notification n);
public Action getAction(Notification n, int actionIndex);
public Action[] getActionsFromParcelableArrayList(ArrayList<Parcelable> parcelables);
public ArrayList<Parcelable> getParcelableArrayListForActions(Action[] actions);
public String getCategory(Notification n);
public boolean getLocalOnly(Notification n);
public String getGroup(Notification n);
public boolean isGroupSummary(Notification n);
public String getSortKey(Notification n);
Bundle getBundleForUnreadConversation(NotificationCompatBase.UnreadConversation uc);
NotificationCompatBase.UnreadConversation getUnreadConversationFromBundle(
Bundle b, NotificationCompatBase.UnreadConversation.Factory factory,
RemoteInputCompatBase.RemoteInput.Factory remoteInputFactory);
}
IMPLはSDK_INTを使用して定義された通知方法を実装するための方法を有する静的インタフェースである)(ここ
public Notification build() {
return IMPL.build(this, getExtender());
}
を構築NotificationCompatImplJellybean.buildにチェックインした
static class NotificationCompatImplKitKat extends NotificationCompatImplJellybean {
@Override
public Notification build(Builder b, BuilderExtender extender) {
NotificationCompatKitKat.Builder builder = new NotificationCompatKitKat.Builder(
b.mContext, b.mNotification, b.mContentTitle, b.mContentText, b.mContentInfo,
b.mTickerView, b.mNumber, b.mContentIntent, b.mFullScreenIntent, b.mLargeIcon,
b.mProgressMax, b.mProgress, b.mProgressIndeterminate, b.mShowWhen,
b.mUseChronometer, b.mPriority, b.mSubText, b.mLocalOnly,
b.mPeople, b.mExtras, b.mGroupKey, b.mGroupSummary, b.mSortKey);
addActionsToBuilder(builder, b.mActions);
addStyleToBuilderJellybean(builder, b.mStyle);
return extender.build(b, builder);
}
ここ
addStyleToBuilderJellybeanがaddInboxStyleがstyle.addLine(テキスト)が、それは次のように宣言されているNotification.javaに行くここでNotificationCompatJellyBean.java
public static void addInboxStyle(NotificationBuilderWithBuilderAccessor b,
CharSequence bigContentTitle, boolean useSummary,
CharSequence summaryText, ArrayList<CharSequence> texts) {
Notification.InboxStyle style = new Notification.InboxStyle(b.getBuilder())
.setBigContentTitle(bigContentTitle);
if (useSummary) {
style.setSummaryText(summaryText);
}
for (CharSequence text: texts) {
style.addLine(text);
}
}
に行くここで
private static void addStyleToBuilderJellybean(NotificationBuilderWithBuilderAccessor builder,
Style style) {
if (style != null) {
if (style instanceof BigTextStyle) {
BigTextStyle bigTextStyle = (BigTextStyle) style;
NotificationCompatJellybean.addBigTextStyle(builder,
bigTextStyle.mBigContentTitle,
bigTextStyle.mSummaryTextSet,
bigTextStyle.mSummaryText,
bigTextStyle.mBigText);
} else if (style instanceof InboxStyle) {
InboxStyle inboxStyle = (InboxStyle) style;
NotificationCompatJellybean.addInboxStyle(builder,
inboxStyle.mBigContentTitle,
inboxStyle.mSummaryTextSet,
inboxStyle.mSummaryText,
inboxStyle.mTexts);
} else if (style instanceof BigPictureStyle) {
BigPictureStyle bigPictureStyle = (BigPictureStyle) style;
NotificationCompatJellybean.addBigPictureStyle(builder,
bigPictureStyle.mBigContentTitle,
bigPictureStyle.mSummaryTextSet,
bigPictureStyle.mSummaryText,
bigPictureStyle.mPicture,
bigPictureStyle.mBigLargeIcon,
bigPictureStyle.mBigLargeIconSet);
}
}
}
につながる:
Notification.javaのmTextの宣言を参照してください
private ArrayList<CharSequence> mTexts = new ArrayList<CharSequence>(5);
この210は、それが私はそれはNotification.javaに宣言し、すべての宣言を経て、最後にこのすべてを通じてなく、短いで行くことは非常に複雑である知っている5への通知行の数を制限することを示していますこれは5行に制限されています。使用
クラスは以下のとおりです。NotificationManagerCompat.java、NotificationCompatJellyBean.javaとNotification.java
2)あなたの質問の一部2について。でも、5行の代わりに7行を表示する理由は分かりません。 enter image description here これは8行の出力です。私はエミュレータでGoogle Nexus S-4.1.1デバイスを使用しています。したがって、私はこれがデバイスに依存しないと思います。ここに報告されるように
詳細な回答ありがとうございました!しかし、新しいArrayList <>(5)は初期容量が5であることを意味するだけではありませんか? - 実際にはArrayListを5つの項目に限定するわけではありません。5つ以上を追加できます。 –
はい、あなたは正しいです。私の悪い:( –