Не может изменить цвет части текста в EditText
Я хочу изменить цвет некоторой части текста в 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);
startIndex
а такжеendIndex
являются индексами в выражении, для которых цвет должен быть изменен.Этот код прекрасно работает для 'expressionTextView', но не для 'expressionEditText'.
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;
В expressionTextView "wan" цвет будет указанным цветом. В expressionEditText не будет никакого изменения цвета.
1 ответ
Это очень просто.
Как я уже говорил ранее в этом вопросе.
Вы можете добиться этого с помощью следующего кода, который я использую всегда. Я пытался сделать этот метод настолько простым, насколько мог. Вы должны передать только свой Editext
а также TextToHighLight
в методе ниже.
Если вам нужен кликабельный промежуток, вы можете перейти к моему ответу. Не стесняйтесь спрашивать в комментариях, если вам нужен 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);
}
}
}