2013-03-23 29 views
13

Come posso ottenere tale effetto con un TextView Android. Sembra in qualche modo come il testo selezionato e non ho trovato nulla di simile nell'API.Colore sfondo testo TextView Android

Questo non è un colore di sfondo per la vista, ma un colore di sfondo solo per il testo. Puoi vedere come si ferma alle interruzioni di riga e ha una sottile linea bianca tra le linee di testo.

Screenshot

+0

Ciao Ole, hai risolto questa domanda? Avrei anche bisogno dello stesso comportamento – alfdev

+0

Possibile duplicato di [TextView con colore di sfondo e interlinea] (https://stackoverflow.com/questions/22939862/textview-with-background-color-and-line-spacing) –

risposta

4

Per quanto posso vedere, non c'è modo 'bella' di fare questo senza sovrascrivere TextView e disegnando pitture personalizzate sulla vista che include il colore dello spazio.

Anche l'impostazione della proprietà lineSpacingExtra espande solo il colore di sfondo.

Si potrebbe anche potenzialmente esaminare la creazione di un custom spannable e utilizzarlo come

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); 

Dove NewSpannableClass è lo spannable personalizzato.

Visto che molte persone sono pigri per cercare come fare spannables personalizzati, ecco un esempio

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

Questo esempio sottolineare il testo. Utilizzare TextPaint per modificare l'aspetto del testo con spanning.

+0

Ya, sei vero. La proprietà lineSpacingExtra espande solo il colore di sfondo. qualcuno ha una soluzione per questo? – NaiveBz

+2

Mi piacerebbe vedere il codice completo, per favore. La risposta è accettata, ma non ricevo "NewSpannableClass" – Bobbelinio

+1

Sarei interessato a vedere anche quel codice completo. – eoinzy

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

definirebbe un TextView con uno sfondo blu e testo bianco ... è che cosa avete bisogno?

+0

Non esattamente . Ho modificato la domanda per essere più specifica. –

1

utilizzare questo esempio

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

per la raccolta di usare il colore questo link http://html-color-codes.info/

Rosso: # 750A0A

Blu: # 002BFF

Verde: # 33FF00

Bianco: #FFFFFF

Nero: # 000000

+1

perché no http://www.colorpicker.com/ .. – Zyoo

+0

buona scelta grazie ..... – XEENA

+0

queste risposte saranno utili –

-1

provare ad usare questo per il colore di sfondo del testo

<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

Prova questa sotto il textview in .xml di file:

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

si potrebbe aggiungere un altro layout intorno al TextView e impostare lo sfondo per il colore che si desidera

<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

Se si vuole farlo da XML prova la soluzione delle altre persone che hanno appena risposto come:

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

Se si vuole farlo da codice attività si può cambiare come dinamicamente cerco con:

text.setBackgroundColor(int color); 
3

Credo che ci sia un modo più semplice più bello per andare su raggiungimento di questo: è sufficiente creare un backgroundColorSpan e inserirlo in una SpannableString . Qualcosa del genere:

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; 
} 

Dove "spannableString" è l'oggetto SpannableString creato e presume essere inizializzato con "testo"; "searchString" rappresenta la parte di testo che desideri "evidenziare" nella tua TextView e "colora" il colore di sfondo a cui deve essere impostato il testo "evidenziato".

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); 

Penso che questo dovrebbe essere sufficiente.

Grazie

0

Basta impostare la lunghezza TextView come match_parent supponendo che si è annidato all'interno di un valore genitore che si estende per tutta la lunghezza dello schermo, e il testo sarà la stessa lunghezza, ma la casella aumenterà al tutta la lunghezza dello schermo.