2011-09-08 18 views
18

Estoy tratando de cambiar el color de ciertas palabras (Resultados de la búsqueda) en un TextView? Traté de usar colores ANSI como este:¿Cómo colorear parte de TextView en Android?

text.setText("\u001B31;1m" + "someText"); 

pero no funcionó. ¿Cómo logro esto?

+0

ver esto: http://stackoverflow.com/questions/4897349/android-coloring-part-of-a-string-using-textview-settext –

Respuesta

31

esto ayudará u

Spannable WordtoSpan = new SpannableString("I know just how to whisper");   
WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 5, 13, 
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
textview.setText(WordtoSpan); 
+0

5, 13 son el charecter, s longitud. –

+4

¿te refieres a los índices de inicio y finalización? – Marek

+0

Sí. es decir, para qué parte desea colorear el texto. punto de inicio y punto final de la vista de texto coloreado. –

4

Estás buscando TextAppearanceSpan y 'SpannableString' Para ser más claro flujo de trabajo es la siguiente

  1. Crear SpannableString de su cadena de origen
  2. Crear TextAppearanceSpan y la pusieron a través de llamada al método setSpan en SpannableString método textView.setText
  3. llamada con SpannableString como argumento
2

También puede utilizar HTML como en el siguiente ejemplo:

string = "<font color='#FFFFFF'>This is my text </font>" + "<font color='#000000'> Another text </font>"; 
textView.setText(Html.fromHtml(string)); 

Sin utilizar variable adicional (solución de una sola línea):

textView.setText(Html.fromHtml("<font color='#FFFFFF'>This is my text </font>" + "<font color='#000000'> Another text </font>")); 

Es bastante fácil y solución comprensible :)

+0

Html.fromHtml (cadena) está en desuso ahora. Por favor actualiza tu respuesta. –

0

Sé que estoy un poco tarde para la fiesta, pero creo que esto ayudará a los futuros visitantes.

Es posible que desee establecer colores de texto parciales en el diseño XML en lugar de utilizar el código Java, por lo tanto, en base a las respuestas anteriores de este hilo, he creado una clase pequeña que funciona bien.

1 - En primer lugar vamos a crear nuestro componente

package yourpackagehere.component; 

import android.content.Context; 
import android.content.res.TypedArray; 
import android.graphics.Color; 
import android.text.Spannable; 
import android.text.SpannableString; 
import android.text.style.ForegroundColorSpan; 
import android.util.AttributeSet; 

import yourpackagehere.R; 

public class FontSpannableTextView extends TextView { 

    public FontSpannableTextView(Context context) { 
     super(context); 
    } 

    public FontSpannableTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setColorPartialString(context, attrs); 
    } 

    public FontSpannableTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     setColorPartialString(context, attrs); 
    } 

    private void setColorPartialString(Context context, AttributeSet attrs) { 
     if (isInEditMode()) { 
      return; 
     } 
     String partialText = null; 
     int partialTextColor = Integer.MIN_VALUE; 

     if (attrs != null) { 
      TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FontSpannableTextView); 
      for (int i = 0; i < a.getIndexCount(); i++) { 
       int attr = a.getIndex(i); 
       switch (attr) { 
        case R.styleable.FontSpannableTextView_fontspannabletextview_partialText: 
         partialText = a.getString(attr); 
         break; 
        case R.styleable.FontSpannableTextView_fontspannabletextview_partialTextColor: 
         partialTextColor = a.getColor(attr, Color.BLACK); 
         break; 
       } 
      } 
      a.recycle(); 
     } 

     if (partialText != null && partialTextColor != Integer.MIN_VALUE) { 
      String wholeText = getText().toString(); 
      Spannable spannable = new SpannableString(wholeText); 
      spannable.setSpan(new ForegroundColorSpan(partialTextColor), 
        wholeText.indexOf(partialText), 
        wholeText.indexOf(partialText) + partialText.length(), 
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      setText(spannable); 
     } else { 
      Log.e("YOURTAGHERE","You must provide both partialText and partialTextColor values"); 
     } 
    } 
} 

2 - en attrs.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="FontSpannableTextView"> 
     <attr name="fontspannabletextview_partialText" format="string" /> 
     <attr name="fontspannabletextview_partialTextColor" format="color" /> 
    </declare-styleable> 
</resources> 

3 - Vamos a usar en nuestro diseño de la prueba

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 


    <yourpackagehere.component.FontSpannableTextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" <!-- Hello world! --> 
     android:layout_margin="25dp" 
     app:fontspannabletextview_partialText="@string/world" <!-- world! --> 
     app:fontspannabletextview_partialTextColor="@color/tutorial_yellow" 
     android:textSize="40sp" 
     /> 

</LinearLayout> 

Ejemplo:

enter image description here