无法更改编辑文本中部分文本的颜色



我想在EditText中更改文本中某些部分文本的颜色。我正在尝试遵循代码,但它不起作用。

SpannableStringBuilder ssb=new SpannableStringBuilder(expression);
ForegroundColorSpan fcs=new ForegroundColorSpan(Color.rgb(181,1,1));
ssb.setSpan(fcs,startIndex,endIndex,SpannableStringBuilder.SPAN_INCLUSIVE_INCLUSIVE);
expressionEditText.setText(ssb);
expressionTextView.setText(ssb);

startIndexendIndex是表达式中的索引 颜色需要更改。

此代码适用于"表达式文本视图",但不适用于 "表达式编辑文本"。

XML 部分:

<EditText
android:id="@+id/expression_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="16dp"
android:layout_above="@id/expression_text_view"
android:gravity="bottom|end"
android:includeFontPadding="false"
android:textSize="45sp"
android:background="@android:color/transparent"
android:inputType="text"/>
<TextView
android:id="@+id/expression_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="16dp"
android:gravity="right"
android:textSize="50sp"/>

例:

expression="I want color to be changed";
startIndex=2;
endIndex=5;

在表达式文本视图中,"wan"颜色将是指定的颜色。 在表达式编辑文本中,不会有任何颜色变化。

这很简单。

正如我之前在这个问题中回答的那样。

您可以通过以下代码来实现这一点,我始终使用。我试图使这种方法尽可能简单。您必须在下面的方法中传递您的EditextTextToHighLight

如果您需要可点击的跨度,您可以转到我的答案。请随时在评论中询问您是否也需要TextWatcher。

public void setHighLightedText(EditText editText, String textToHighlight) {
String tvt = editText.getText().toString();
int ofe = tvt.indexOf(textToHighlight, 0);
Spannable WordtoSpan = new SpannableString(editText.getText());
for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {

ofe = tvt.indexOf(textToHighlight, ofs);
if (ofe == -1)
break;
else {
WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), ofe, ofe + textToHighlight.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setText(WordtoSpan, TextView.BufferType.SPANNABLE);
}
}
}

相关内容

  • 没有找到相关文章

最新更新