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.
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);
Où 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é.
<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?
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
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
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);
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.
Essayez ceci sous la textview
dans le fichier .xml
:
<TextView Android:background="#0000FF">