LeadingMarginSpan没有正确缩进多级/嵌套项目符号

时间:2017-05-30 09:58:01

标签: android spannable bulletedlist

我通过扩展BulletSpan来创建自定义LeadingMarginSpan,以在TextView中绘制自定义项目符号项。 LeadingMarginSpan的文档说它可以嵌套(即多级子弹):

  

单个段落可以有多个前导边距;他们   将按顺序呈现,每个都将其边距添加到之前的边距。

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级别21 中,x的调用始终为0,在 API级别23 中,调用不同级别的x。< / p>

那么,实现此方法的正确方法是什么?

当前实施与原始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

提前致谢

0 个答案:

没有答案