2016-07-21 5 views
2

У меня есть TextView со случайным цветом фона (может быть любой цвет действительно). У меня также есть текст в этом Textview, который должен быть доступен для чтения. Я предполагаю, что лучшим решением является выделение указанного текста в белом цвете и установка цвета текста в черный.выделить текст внутри текстового поля

Мой вопрос: возможно ли выделить текст внутри texview из XML?

У меня есть следующие в моем макете:

<TextView 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:id="@+id/colorButton4" 
     android:layout_gravity="right|bottom" 
     android:background="@drawable/layout_border" 
     android:layout_marginRight="30dp" 
     android:layout_marginBottom ="30dp" 
     android:clickable="true" 
     android:onClick="onClick" 
     android:gravity="center" 
     android:textColorHighlight="@color/bgWhite" 
     android:textColor="@color/Black" 
     android:text="5431354" /> 

Но deosn't выделить текст.

+0

Что вы имеете в виду с подсветкой? – finki

+1

Имейте текст видимым независимо от цвета фона TextView. Нравится это: http://i1.wp.com/texblog.org/Wordpress/wp-content/uploads/2015/05/latex-highlight-text.png – Slamit

+0

взгляните на мой ответ https: // stackoverflow. com/a/47142724/2685454 – Sumit

ответ

0

Если бы вы проверили документы для TextView вы бы обнаружили, что android:textColorHighlight не делать то, что вы хотите: https://developer.android.com/reference/android/widget/TextView.html#attr_android:textColorHighlight

Он используется только при выборе текста, например, в EditText. Вы должны установить фон TextView для «hightlight».

+0

Я так понимаю. Мой вопрос в том, возможно ли это любым другим способом? Я предполагаю, что нет, но как нуб, я спрашиваю, если есть трюк, которого я не знаю. – Slamit

+0

Я не понимаю, почему вы устанавливаете фон в текстовом режиме, когда хотите «выделить» его черным в любом случае? ;) – finki

+0

Я хочу иметь TextView со случайным цветом фона и текстом, говорящим «цвет фона » Теперь цвет фона с я могу прочитать мой текст, если это темно-синий, это трудно прочитать, если он вернулся Я не могу это прочитать. Я надеюсь, что это правильно объяснит – Slamit

3

Возможно, для этого вам понадобится SpannableString, который позволяет отдельным частям строки визуализироваться по-разному в TextView.

Как так:

SpannableString str = new SpannableString("Highlighted. Not highlighted."); 
    str.setSpan(new BackgroundColorSpan(Color.YELLOW), 0, 11, 0); 
    textView.setText(str); 
+0

Значит, вы говорите мне, что это невозможно сделать, не имея его где-нибудь в моем Java-коде? – Slamit

+0

Можно стилизовать текст в файле strings.xml с помощью определенных HTML-тегов. Попробуйте один из этих ответов: http://stackoverflow.com/questions/17559019/text-view-with-different-colored-texts-in-xml-code, но используйте цвет фона вместо цвета шрифта – Egg

+0

Спасибо за ссылку. Это дает некоторые интересные моменты! К сожалению, ни один из XML-решений не работает. Думаю, мне придется использовать для этого какой-то Java-код. – Slamit

1

Чтобы выделить все вхождения определенного текста использовать этот метод:

private void highlightString(String input) { 
//Get the text from text view and create a spannable string 
SpannableString spannableString = new SpannableString(mTextView.getText()); 
//Get the previous spans and remove them 
BackgroundColorSpan[] backgroundSpans = spannableString.getSpans(0, spannableString.length(), BackgroundColorSpan.class); 

for (BackgroundColorSpan span: backgroundSpans) { 
    spannableString.removeSpan(span); 
} 

//Search for all occurrences of the keyword in the string 
int indexOfKeyword = spannableString.toString().indexOf(input); 

while (indexOfKeyword > 0) { 
    //Create a background color span on the keyword 
    spannableString.setSpan(new BackgroundColorSpan(Color.YELLOW), indexOfKeyword, indexOfKeyword + input.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    //Get the next index of the keyword 
    indexOfKeyword = spannableString.toString().indexOf(input, indexOfKeyword + input.length()); 
} 

//Set the final text on TextView 
mTextView.setText(spannableString);} 

Примечание: mTextView является объектом TextView, в котором вы хотите, чтобы выделить текст

+0

'while (indexOfKeyword! = -1) {...}', чтобы также выделить первое слово в тексте. –

Смежные вопросы