2013-03-23 5 views
13

Как добиться такого эффекта с помощью Android TextView. Это похоже на выделенный текст, и я не мог найти что-то подобное в API.Цвет текста текста TextView Text

Это не цвет фона для представления, а цвет фона только для текста. Вы можете видеть, как он останавливается при разрыве строк и имеет тонкую белую линию между текстовыми строками.

Screenshot

+0

Привет, Оле, вы решили этот вопрос? Мне также нужно было бы такое же поведение – alfdev

+0

Возможный дубликат [TextView с цветом фона и межстрочным интервалом] (https://stackoverflow.com/questions/22939862/textview-with-background-color-and-line-spacing) –

ответ

4

Насколько я могу видеть, что нет 'хорошего' способа сделать это без переопределения TextView и рисования пользовательских красок в представлении, которое включает цвет пробелов.

Даже установка свойства lineSpacingExtra только расширяет цвет фона.

Вы можете также потенциально смотреть в создании пользовательских spannable и использовать его как

Spannable str = new SpannableStringBuilder("How can I achieve such an effect with an Android TextView. It looks somehow like selected text and I couldn't find something similar in the API."); 
str.setSpan(new NewSpannableClass(), 0, str.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
((TextView)findViewById(R.id.text)).setText(str); 

Где NewSpannableClass обычай spannable.

Видя, как много людей ленивы, чтобы посмотреть, как сделать пользовательские spannables, вот пример

public class CustomSpannable extends ClickableSpan 
{ 
    @Override public void updateDrawState(TextPaint ds) 
    { 
     super.updateDrawState(ds); 
     ds.setUnderlineText(true); 
    } 
} 

Этот пример подчеркивает текст. Используйте TextPaint, чтобы изменить внешний вид растянутого текста.

+0

Ya, вы правда. Свойство lineSpacingExtra только расширяет цвет фона. любой получил решение для этого? – NaiveBz

+2

Я хотел бы видеть полный код, пожалуйста. Ответ принят, но я не получаю «NewSpannableClass» – Bobbelinio

+1

Мне было бы интересно увидеть полный код. – eoinzy

14
<TextView 
android:background="#0000FF" 
android:textColor="#FFFFFF" /> 

определить бы в TextView с синим фоном и белым текстом ... это то, что вам нужно?

+0

Не совсем , Я отредактировал вопрос, чтобы быть более конкретным. –

1

Используйте этот пример

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="#0000FF" 
    android:textColor="#FFFFFF" /> 

для выбора цвета, используйте эту ссылку http://html-color-codes.info/

Красный: # 750A0A

Синий: # 002BFF

Зеленый: # 33FF00

Белый: #FFFFFF

Черный: # 000000

+1

почему нет http://www.colorpicker.com/ .. – Zyoo

+0

хороший выбор спасибо ..... – XEENA

+0

эти ответы будут полезны – 2014-02-14 06:15:51

-1

Попробуйте использовать это для текста цвета фона

<TextView 
      android:id="@+id/comment_dis" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:text="Stack Overflow 
      android:textColor="#ffffff" 
      android:background="#3cabdc"/> 
0

Попробуйте ниже textview в .xml файле:

<TextView android:background="#0000FF"> 
-1

Вы можете добавить другую раскладку вокруг TextView и установить его фона на цвет вы хотите

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="#000000" > 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:textColor="#FFFFFF" 
     android:text="@string/text" /> 

</LinearLayout> 
1

Если вы хотите, чтобы это сделать из XML попробуйте решение других людей, которые просто ответили как:

<TextView 
      android:id="@+id/TextView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:textColor="#ffffff" 
      android:background="#1bgtbgt"/> 

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

text.setBackgroundColor(int color); 
3

Я считаю, что есть более легкий, красивый способ идти о достижении этой цели: просто создать backgroundColorSpan и добавить его в SpannableString , Что-то вдоль этих линий:

public static SpannableString buildBackgroundColorSpan(SpannableString spannableString, 
               String text, String searchString, int color) { 

    int indexOf = text.toUpperCase().indexOf(searchString.toUpperCase()); 

    try { 
     spannableString.setSpan(new BackgroundColorSpan(color), indexOf, 
       (indexOf + searchString.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } catch (Exception e) { 

    } 


    return spannableString; 
} 

Где «spannableString» является объектом SpannableString создан и предполагается инициализируется с «текст»; «searchString» представляет фрагмент текста, который вы хотите «выделить» в вашем TextView, и «цвет» цвета фона, на который должен быть установлен «выделенный» текст.

String text = "The Quick Brown Fox Jumps over the Lazy Dog"; 
String searchString = "brown"; 
int color = Color.parseColor("#FFF5F19E"); 

SpannableString spannableString = new SpannableString(text); 
spannableString = StringUtils.buildBackgroundColorSpan(spannableString, text, searchString, color); 

Я думаю, этого должно быть достаточно.

Благодаря

0

Просто установите длину TextView в match_parent при условии, что он вложен в родительском значение, которое охватывает всю длину экрана, и ваш текст будет такой же длины, но коробка увеличится до всю длину экрана.

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