2016-06-29 6 views
1

私はNotificationCompat.InboxStyleを使用して通知を表示します。NotificationCompat.InboxStyle:最大で何行追加できますか?

私はすべての受信トレイ-のメッセージが(拡大)通知にはまだ表示されるように、私は​​で最大で追加することができますどのように多くの行を見つけることができませんでした。

私はdocumentation of NotificationCompat.InboxStyleでこれを見つけた:

ヘルパークラスを(最大5)文字列のリストが含ま大判通知を生成します。

これによれば、5行、最大だろう。

しかし:
は (1)NotificationCompat.javaで私はこれを見つけた:

private static final int MAX_CHARSEQUENCE_LENGTH = 5 * 1024; 

... 

ArrayList<CharSequence> mTexts = new ArrayList<CharSequence>(); 

... 

/** 
* Append a line to the digest section of the Inbox notification. 
*/ 
public InboxStyle addLine(CharSequence cs) { 
    mTexts.add(Builder.limitCharSequenceLength(cs)); 
    return this; 
} 

... 

protected static CharSequence limitCharSequenceLength(CharSequence cs) { 
    if (cs == null) return cs; 
    if (cs.length() > MAX_CHARSEQUENCE_LENGTH) { 
     cs = cs.subSequence(0, MAX_CHARSEQUENCE_LENGTH); 
    } 
    return cs; 
} 

これはInboxStyleを作成する際に線が限定されるものではないことを示しています。

(2)私は私のAndroid携帯電話上の通知の拡大図に示すであろう7行を追加することができますことを、試みることによって、分かりました。私が8行追加したときに、 "..."が7番目の受信ボックスメッセージとして表示されます。

私の質問
受信ボックスメッセージ行の制限は、常に7か、デバイスの画面サイズのようにデバイス固有の制限ですか?

デバイス固有の場合は、すべてのAndroidバージョン(拡張された通知をサポートする)に表示されていることを確認できる行の数になりますか?
これはの5つになりますかドキュメントに記載されている文字列はありますか?

または私は何かを逃したのですか?私はちょうどそれについて何かを見つけることができなかった、そして誰も前にこの問題を抱えていたようではない - 私は、感謝の助けを感謝する。

答えて

2

あなたが含ま大判通知を生成するために、すべてのこの

ヘルパークラスを通過しない場合、エンドNotification.javaで

private ArrayList<CharSequence> mTexts = new ArrayList<CharSequence>(5); 

あるラインとその下の説明を確認してください(最大5つの)文字列のリスト

プラットフォームで大きな形式の通知が提供されない場合、この方法は効果がありません。ユーザーは通常の通知ビューを常に表示します。 このクラスは、「再建」である:それは、ビルダーオブジェクトにアタッチし、その動作を変更するので、同じよう:

Notification noti = new Notification.Builder() .setContentTitle(&quot;5 New mails from &quot; + sender.toString()) .setContentText(subject) .setSmallIcon(R.drawable.new_mail) .setLargeIcon(aBitmap) .setStyle(new Notification.InboxStyle() .addLine(str1) .addLine(str2) .setContentTitle(&quot;&quot;) .setSummaryText(&quot;+3 more&quot;)) .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デバイスを使用しています。したがって、私はこれがデバイスに依存しないと思います。ここに報告されるように

+0

詳細な回答ありがとうございました!しかし、新しいArrayList <>(5)は初期容量が5であることを意味するだけではありませんか? - 実際にはArrayListを5つの項目に限定するわけではありません。5つ以上を追加できます。 –

+0

はい、あなたは正しいです。私の悪い:( –

-1

答えは単純明快で、最大値は5である:上記のリンクより作成https://developer.android.com/reference/android/app/Notification.InboxStyle.html

:のリストが含まれる大判の通知を生成するための

ヘルパークラス(最大5文字)

+0

申し訳ありませんが、あなたは私の質問を完全に読まなかったと思います。私はすでにこのことを知っていました。InboxStyle –

関連する問題