gpt4 book ai didi

android - 是否可以通过调用 Canvas.drawText() 来显示多色文本?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:40 24 4
gpt4 key购买 nike

我想使用 Canvas.drawText() 来显示多色文本。更具体地说,我想突出显示传递给 drawText() 方法的文本的子字符串。

文本采用具有 0 个或多个 ForegroundColorSpan 对象的 SpannableString 形式。

查看 Canvas 代码,似乎对传递的 CharSequence 进行了 .toString() 调用,这意味着这是不可能的。

还有其他方法吗?

编辑:文本可能偶尔会更改(总更改,而不是增量更改)。此外,自定义 View 中可能有多个文本位于不同的不相关位置。

最佳答案

是的,可以使用 Layout 之一类。这些是用于将文本绘制到 Canvas 的辅助类,它们支持 Spannables。如果您的文本没有改变,请使用 StaticLayout。

示例

将此添加到您的自定义 View 类

private StaticLayout layout;

将此代码放入您的 onLayoutonSizeChanged

Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");  

wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

TextPaint paint = new TextPaint();
paint.setTextSize(20f);
paint.setColor(Color.RED);
layout = new StaticLayout(wordtoSpan, paint, getWidth(), Alignment.ALIGN_NORMAL, 1, 0, false);

然后在你的绘图方法中调用

layout.draw(canvas);

如果您的文本经常更改,您可以使用 DynamicLayout

Editable.Factory fac = Editable.Factory.getInstance();
Editable edit = fac.newEditable(wordtoSpan);
DynamicLayout layout = new DynamicLayout(edit,paint,getWidth(),Alignment.ALIGN_CENTER,1,0,false);

使用编辑对象更改文本

edit.append("hello");

关于android - 是否可以通过调用 Canvas.drawText() 来显示多色文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10410515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com