TextViewでテキストのスパンの色を設定することは可能ですか?
テキストの一部が青であるTwitterアプリに似た何かをしたいと思います。下の画像をご覧ください:
別の答えは非常に似ていますが、TextView
のテキストを2回設定する必要はありません
TextView TV = (TextView)findViewById(R.id.mytextview01);
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);
TV.setText(wordtoSpan);
ここに小さなヘルプ機能があります。複数の言語がある場合に最適です!
private void setColor(TextView view, String fulltext, String subtext, int color) {
view.setText(fulltext, TextView.BufferType.SPANNABLE);
Spannable str = (Spannable) view.getText();
int i = fulltext.indexOf(subtext);
str.setSpan(new ForegroundColorSpan(color), i, i + subtext.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
さらに制御したい場合は、TextPaint
クラスを確認することをお勧めします。使用方法は次のとおりです。
final ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(final View textView) {
//Your onClick code here
}
@Override
public void updateDrawState(final TextPaint textPaint) {
textPaint.setColor(yourContext.getResources().getColor(R.color.orange));
textPaint.setUnderlineText(true);
}
};
新しい概念を理解しようとするとき、私はいつも視覚的な例を参考にします。
SpannableString spannableString = new SpannableString("Hello World!");
BackgroundColorSpan backgroundSpan = new BackgroundColorSpan(Color.YELLOW);
spannableString.setSpan(backgroundSpan, 0, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
SpannableString spannableString = new SpannableString("Hello World!");
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(foregroundSpan, 0, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
SpannableString spannableString = new SpannableString("Hello World!");
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
BackgroundColorSpan backgroundSpan = new BackgroundColorSpan(Color.YELLOW);
spannableString.setSpan(foregroundSpan, 0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(backgroundSpan, 3, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
TextView
´sのテキストをスパン可能に設定し、テキストにForegroundColorSpan
を定義します。
TextView textView = (TextView)findViewById(R.id.mytextview01);
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);
textView.setText(wordtoSpan);
一部の状況で使用できる別の方法は、Spannableを取得しているビューのプロパティでリンクの色を設定することです。
たとえば、SpannableをTextViewで使用する場合、次のようにXMLでリンクの色を設定できます。
<TextView
Android:id="@+id/myTextView"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textColorLink="@color/your_color"
</TextView>
次のコードで設定することもできます。
TextView tv = (TextView) findViewById(R.id.myTextView);
tv.setLinkTextColor(your_color);
Spannableを作成するためのファクトリーがあり、次のようにキャストを回避します。
Spannable span = Spannable.Factory.getInstance().newSpannable("text");
色の設定 on テキスト by 文字列を渡すおよび色:
private String getColoredSpanned(String text, String color) {
String input = "<font color=" + color + ">" + text + "</font>";
return input;
}
テキストの設定 on TextView/Button/EditText etc
TextView:
TextView txtView = (TextView)findViewById(R.id.txtView);
色付きの文字列を取得:
String name = getColoredSpanned("Hiren", "#800000");
TextViewにテキストを設定:
txtView.setText(Html.fromHtml(name));
完了
String text = "I don't like Hasina.";
textView.setText(spannableString(text, 8, 14));
private SpannableString spannableString(String text, int start, int end) {
SpannableString spannableString = new SpannableString(text);
ColorStateList redColor = new ColorStateList(new int[][]{new int[]{}}, new int[]{0xffa10901});
TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null, Typeface.BOLD, -1, redColor, null);
spannableString.setSpan(highlightSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new BackgroundColorSpan(0xFFFCFF48), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new RelativeSizeSpan(1.5f), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
}
出力:
すべての答えが Android.graphics.Color
のみについて話しているように見えるので、受け入れられた答えに追加するだけです:私が望む色がres/values/colors.xml
で定義されている場合
たとえば、 マテリアルデザインの色colors.xml
で定義されていることを考慮してください。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="md_blue_500">#2196F3</color>
</resources>
( Android_material_design_colours.xml
はあなたの親友です)
次に、Color.BLUE
を使用する場所でContextCompat.getColor(getContext(), R.color.md_blue_500)
を使用します。
wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
になる:
wordtoSpan.setSpan(new ForegroundColorSpan(ContextCompat.getColor(getContext(), R.color.md_blue_500)), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
私が見つけた場所:
これは私がこれのために持っているKotlin拡張機能です
fun TextView.setColouredSpan(Word: String, color: Int) {
val spannableString = SpannableString(text)
val start = text.indexOf(Word)
val end = text.indexOf(Word) + Word.length
try {
spannableString.setSpan(ForegroundColorSpan(color), start, end,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
text = spannableString
} catch (e: IndexOutOfBoundsException) {
println("'$Word' was not not found in TextView text")
}
}
テキストをTextViewに設定した後に使用します
private val blueberry by lazy { getColor(R.color.blueberry) }
textViewTip.setColouredSpan("Warning", blueberry)
このコードをur MainActivityに貼り付けます
TextView textview=(TextView)findViewById(R.id.textviewid);
Spannable spannable=new SpannableString("Hello my name is sunil");
spannable.setSpan(new ForegroundColorSpan(Color.BLUE), 0, 5,
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
textview.setText(spannable);
//Note:- the 0,5 is the size of colour which u want to give the strring
//0,5 means it give colour to starting from h and ending with space i.e.(hello), if you want to change size and colour u can easily