3
我正在尝试创建一个跨度来给文本一个四舍五入的背景。但是,draw
方法永远不会被调用。自定义文本跨度不能正常工作
这是代码:
public class RoundedBackgroundSpan extends ReplacementSpan {
@Override
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint)
{
RectF rect = new RectF(x, top, x + measureText(paint, text, start, end), bottom);
paint.setColor(Color.BLUE);
canvas.drawRoundRect(rect, 100f, 30f, paint);
paint.setColor(Color.WHITE);
canvas.drawText(text, start, end, x, y, paint);
}
@Override
public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm)
{
return Math.round(measureText(paint, text, start, end));
}
private float measureText(Paint paint, CharSequence text, int start, int end)
{
return paint.measureText(text, start, end);
}
}
这就是我如何设置它:
Spannable spannable = new SpannableString(introText.getText());
spannable.setSpan(new RoundedBackgroundSpan(), 0, textView.getText().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannable);
我没有,为什么这不工作的头绪。
http://stackoverflow.com/questions/20069537/replacementspans-draw-method-isnt-called可能会给你一些线索。我还没有使用'ReplacementSpan'的自定义子类。 – CommonsWare 2015-04-04 15:21:01
答案建议将第二个参数添加到setText,以便它变成textView.setText(spanned,TextView.BufferType.SPANNABLE);但对于我来说这还没有工作。 getSize方法被调用,虽然 – 2015-04-04 15:33:57
我发现一个黑客,使它的工作,看到我的答案在这里:http://stackoverflow.com/a/32170735/258848 – dimsuz 2015-08-23 19:39:19