2013-03-23 16 views
13

Wie kann ich einen solchen Effekt mit einem Android TextView erzielen. Es sieht irgendwie wie ausgewählter Text aus und ich konnte etwas Ähnliches in der API nicht finden.Android TextView Texthintergrundfarbe

Dies ist keine Hintergrundfarbe für die Ansicht, sondern eine Hintergrundfarbe nur für den Text. Sie können sehen, wie es bei Zeilenumbrüchen stoppt und eine dünne weiße Linie zwischen Textzeilen hat.

Screenshot

+0

Hallo Ole, hast du diese Frage gelöst? Ich würde auch das gleiche Verhalten brauchen – alfdev

+0

Mögliches Duplikat von [TextView mit Hintergrundfarbe und Zeilenabstand] (https://stackoverflow.com/questions/22939862/textview-with-background-color-and-line-spacing) –

Antwort

4

Soweit ich sehen kann, gibt es keine 'nette' Art und Weise, dies zu tun ohne TextView zu überschreiben und benutzerdefinierte Farben auf der Ansicht zu zeichnen, die die Lückenfarbe enthält.

Wenn Sie nur die Eigenschaft lineSpacingExtra festlegen, wird nur die Hintergrundfarbe erweitert.

Sie können auch sehen möglicherweise in einem benutzerdefinierten spannable erstellen und verwenden Sie es wie

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

Wo NewSpannableClass den benutzerdefinierten spannable ist.

sehen wie viele Menschen sind faul, um zu sehen, wie benutzerdefinierte spannables zu machen, ein Beispiel ist hier

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

Dieses Beispiel wird der Text unterstreichen. Verwenden Sie TextPaint, um das Aussehen des übergreifenden Texts zu ändern.

+0

Ya, du bist wahr. Die lineSpacingExtra-Eigenschaft erweitert nur die Hintergrundfarbe. Hat jemand eine Lösung dafür? – NaiveBz

+2

Ich möchte bitte den vollständigen Code sehen. Die Antwort wird akzeptiert, aber ich bekomme keine "NewSpannableClass" – Bobbelinio

+1

Ich wäre daran interessiert, diesen vollständigen Code zu sehen. – eoinzy

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

Würde ein TextView mit einem blauen Hintergrund und weißen Text definiert ... ist das, was Sie brauchen?

+0

Nicht genau . Ich habe die Frage genauer bearbeitet. –

1

Verwenden Sie dieses Beispiel

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

für die Kommissionierung Farbe diesen Link http://html-color-codes.info/

Rot: # 750A0A

Blau: # 002BFF

Grün: # 33FF00

White: #FFFFFF

Black: 000000 #

+1

warum nicht http://www.colorpicker.com/ .. – Zyoo

+0

gute wahl dank ..... – XEENA

+0

diese antwort wird hilfreich –

-1

Versuchen Sie, diese Farbe Texthintergrund für die Verwendung von

<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

Versuchen Sie dies unter dem textview in .xml Datei:

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

Sie ein anderes Layout rund um die Textview hinzufügen könnte und dessen Hintergrund auf die Farbe legen Sie

wollen
<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

Wenn Sie es tun wollen von XML versuchen Sie die Lösung der anderen Leute, die gerade wie geantwortet haben:

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

Wenn Sie es von Aktivität Code tun möchten, können Sie es dynamisch mit wie versuchen ändern:

text.setBackgroundColor(int color); 
3

Ich glaube, es ist ein einfacher, schöner Weg, um dies zu erreichen, zu gehen: einfach eine backgroundColorSpan erstellen und an einem SpannableString hinzufügen . Etwas in diese Richtung:

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

Wo „spannableString“ ist das SpannableString Objekt erstellt und angenommen mit „Text“ initialisiert werden; "searchString" repräsentiert den Textabschnitt, den Sie in Ihrer Textansicht "markieren" möchten, und "färbt" die Hintergrundfarbe, auf die der "markierte" Text eingestellt werden soll.

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

Ich denke, das sollte ausreichen.

Dank

0

Stellen Sie einfach die Textview Länge als match_parent davon aus, dass es innerhalb eines übergeordneten Wert verschachtelt ist, die die gesamte Länge des Bildschirms erstreckt, und Ihr Text wird die gleiche Länge, aber die Box auf die erhöht ganze Bildschirmlänge.