невозможно изменить цвет части текста в EditText

avatar
Deepanshu Arora
8 апреля 2018 в 07:30
62
1
0

Я хочу изменить цвет некоторой части текста в 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', но не для 'выражениеEditText'.

часть 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 не будет никакого изменения цвета.

Источник
ADM
8 апреля 2018 в 07:34
0

Добавьте свою часть Xml.

Deepanshu Arora
8 апреля 2018 в 07:46
0

@ADM добавил часть xml

ADM
8 апреля 2018 в 07:57
0

Можете ли вы добавить текущий результат вывода. Снимок экрана. И образец выражения тоже.

Deepanshu Arora
8 апреля 2018 в 08:35
0

@ADM Я добавил описание примера.

ADM
8 апреля 2018 в 08:45
0

Код в порядке. И это будет работать для статического текста. В Edittext, если вам нужен ввод Span, вы должны использовать TextWatcher. Какое именно требование?

Khemraj Sharma
8 апреля 2018 в 09:43
0

Посмотреть ответ

Ответы (1)

avatar
Khemraj Sharma
8 апреля 2018 в 08:45
0

Это очень просто.

Как я уже отвечал на этот вопрос.

Вы можете добиться этого с помощью следующего кода, который я всегда использую. Я постарался сделать этот метод максимально простым. Вы должны передать только свои 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);
        }
    }
}