web-dev-qa-db-de.com

Android TextView-Texthintergrundfarbe

Wie kann ich mit einem Android-TextView einen solchen Effekt erzielen? Es sieht irgendwie nach ausgewähltem Text aus und ich konnte nichts Ähnliches in der API finden.

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

Screenshot

13
Ole Krüger

Soweit ich sehen kann, gibt es keinen 'schönen' Weg, dies zu tun, ohne TextView zu überschreiben und benutzerdefinierte Farben auf die Ansicht zu zeichnen, die die Lückenfarbe einschließt.

Wenn Sie die Eigenschaft lineSpacingExtraeinstellen, wird nur die Hintergrundfarbe erweitert.

Sie könnten auch in Betracht ziehen, einen benutzerdefinierten spannablezu erstellen und ihn wie zu verwenden 

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

Dabei ist NewSpannableClassdas benutzerdefinierte spannbare Element.

Da es so viele Leute gibt, die faul sind, nachzuschlagen, wie man eigene spannbare Teile herstellt, hier ein Beispiel

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

Dieses Beispiel unterstreicht den Text. Verwenden Sie TextPaintname__, um das Aussehen des überbrückten Textes zu ändern.

4
ScruffyFox
<TextView
Android:background="#0000FF"
Android:textColor="#FFFFFF" />

Würde ein TextView mit blauem Hintergrund und weißem Text definieren ... ist das, was Sie brauchen?

14
Tyler MacDonell

Ich glaube, es gibt eine einfachere und schönere Methode, um dies zu erreichen: Erstellen Sie einfach ein backgroundColorSpan und fügen Sie es einem SpannableString hinzu. 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;
}

Dabei ist "spannableString" das SpannableString-Objekt, das mit "Text" initialisiert wird. "searchString" steht für den Text, den Sie in Ihrer TextView "hervorheben" möchten, und "Farbe" der Hintergrundfarbe, auf die der "hervorgehobene" Text gesetzt 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.

Vielen Dank

4
Arlon

Verwenden Sie dieses Beispiel 

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

um Farbe auszuwählen, verwenden Sie diesen Link http://html-color-codes.info/

Rot: # 750A0A

Blau: # 002BFF

Grün: # 33FF00

Weiß: #FFFFFF

Schwarz: # 000000

1
XEENA

Wenn Sie dies aus XML heraus tun möchten, versuchen Sie die Lösung der anderen Personen, die gerade 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 mit dem Aktivitätscode tun möchten, können Sie es dynamisch ändern, indem Sie Folgendes versuchen:

text.setBackgroundColor( int color);
1
lungo86

Legen Sie die TextView-Länge einfach als match_parent fest, vorausgesetzt, sie ist in einem übergeordneten Wert verschachtelt, der sich über die gesamte Bildschirmlänge erstreckt, und Ihr Text wird dieselbe Länge haben, aber das Feld wird auf die gesamte Bildschirmlänge vergrößert.

0
Rafa

Versuchen Sie dies unter der textview in der .xml-Datei:

<TextView Android:background="#0000FF">
0
Dileep singh