にカスタムの箇条書き項目を描画するようBulletSpan
に拡張して、カスタムを作成します。のドキュメントには、ネストできると書かれています(つまり、マルチレベルの箇条書き):LeadingMarginSpan
TextView
LeadingMarginSpan
1 つの段落に複数の先頭マージン スパンが存在する場合があります。それらは順番にレンダリングされ、それぞれがその前のものにマージンを追加します。
LeadingMarginSpan
クラスには次のメソッドがあります。
public void drawLeadingMargin(Canvas c, Paint p, int x, int dir,
int top, int baseline, int bottom,
CharSequence text, int start, int end,
boolean first, Layout l);
メソッドの実装でインデント自体を計算する必要があるのか、それともインデントされているのかわかりません。デバイスによって動作が異なります。たとえば、API レベル 21x
では、常に 0 で呼び出され、 API レベル 23では、レベルごとに異なる値で呼び出されx
ます。
では、このメソッドを実装する正しい方法は何ですか?
現在の実装はオリジナルとよく似ていBulletSpan
ます:
@Override
public void drawLeadingMargin(Canvas c, Paint p, int x, int dir,
int top, int baseline, int bottom,
CharSequence text, int start, int end,
boolean first, Layout l) {
if (((Spanned) text).getSpanStart(this) == start) {
...
if (c.isHardwareAccelerated()) {
...
c.translate(x + dir * mBulletRadius,
(top + bottom) / 2.0f);
...
} else {
c.drawCircle(x + dir * mBulletRadius,
(top + bottom) / 2.0f, mBulletRadius, p);
}
...
}
...
}
API レベル 21での動作:
o Level 1
o Level 2
o Level 3
o Level 3
o Level 2
API レベル 23での動作:
o Level 1
o Level 2
o Level 3
o Level 3
o Level 2
前もって感謝します