web-dev-qa-db-fra.com

Couleur de fond du texte Android TextView

Comment puis-je obtenir un tel effet avec un Android TextView. Cela ressemble en quelque sorte au texte sélectionné et je ne pouvais pas trouver quelque chose de similaire dans l'API.

Ce n'est pas une couleur d'arrière-plan pour la vue, mais une couleur d'arrière-plan uniquement pour le texte. Vous pouvez voir comment il s'arrête aux sauts de ligne et comporte une fine ligne blanche entre les lignes de texte.

Screenshot

13
Ole Krüger

Autant que je sache, il n'y a pas de "bonne" façon de faire cela sans surcharger TextView et dessiner des peintures personnalisées sur la vue qui inclut la couleur d'espace.

Même si vous définissez la propriété lineSpacingExtra, la couleur d'arrière-plan est uniquement développée.

Vous pouvez aussi potentiellement envisager de créer une spannable personnalisée et l’utiliser comme 

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 est la spannable personnalisée.

Voyant que beaucoup de gens sont paresseux pour savoir comment créer des spannables personnalisés, voici un exemple

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

Cet exemple soulignera le texte. Utilisez TextPaint pour changer l'apparence du texte fractionné.

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

Définirait une TextView avec un arrière-plan bleu et un texte blanc ... est-ce ce dont vous avez besoin?

14
Tyler MacDonell

Je pense qu’il existe un moyen plus simple et plus agréable d’atteindre cet objectif: créez simplement un backgroundColorSpan et ajoutez-le à un SpannableString. Quelque chose dans ce sens:

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

Où "spannableString" est l'objet SpannableString créé et supposé être initialisé avec "text"; "searchString" représente le morceau de texte que vous souhaitez "surligner" dans votre TextView et "colore" la couleur d'arrière-plan sur laquelle le texte "en surbrillance" doit être défini.

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

Je pense que cela devrait suffire.

Merci

4
Arlon

Utilisez cet exemple 

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

pour choisir la couleur, utilisez ce lien http://html-color-codes.info/

Rouge: # 750A0A

Bleu: # 002BFF

Vert: # 33FF00

Blanc: #FFFFFF

Noir: # 000000

1
XEENA

Si vous voulez le faire à partir de XML, essayez la solution des autres personnes qui ont juste répondu comme:

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

Si vous voulez le faire à partir du code d'activité, vous pouvez le changer de façon dynamique, comme vous le feriez avec:

text.setBackgroundColor( int color);
1
lungo86

Définissez simplement la longueur de TextView sur match_parent en supposant qu’elle est imbriquée dans une valeur parent qui couvre toute la longueur de l’écran et que votre texte aura la même longueur, mais que la zone augmentera sur toute la longueur de l’écran.

0
Rafa

Essayez ceci sous la textview dans le fichier .xml:

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