はい、Layoutクラスの 1 つを使用することで可能です。これらはキャンバスにテキストを描画するためのヘルパー クラスであり、スパンナブルをサポートしています。テキストが変わらない場合は、StaticLayout を使用してください。
例
これをカスタム ビュー クラスに追加します。
private StaticLayout layout;
このコードをあなたのonLayout
またはonSizeChanged
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");