Je développe l'application Android. J'ai besoin de souligner une partie du texteView.
SpannableString content = new SpannableString("Ack:"); content.setSpan(new UnderlineSpan(), 0, content.length(), 0); tvAck.setText(content);`
4 Réponses :
Je n'ai pas essayé cela moi-même, c'est donc plus une idée qu'une solution, mais vaut probablement la peine d'être essayée. Classe Donc, ce serait quelque chose comme p> référence pour les deux Sous-litline code> a la méthode
mise à jour de la méthodeDawstate code>, qui prend
textpaint code> comme paramètre. À son tour, TextPain peut avoir champ
Public int LinkColor code>.
TextPaint code> et
Sous-litline code> sont très pauvres, la majorité de Javadoc manquant complètement (juge pour vous-même: http://developer.android.com/reference/andrroid/text/textpaint.html ), donc je ne suis pas certain de les utiliser. P > p>
Je ne peux penser à rien d'autre. Pourquoi ça ne marchera-t-il pas? L'avez-vous essayé?
La raison pour laquelle cela ne fonctionne pas est que updatedatedawstate code> n'indique que le texte
textpaint code> qu'il doit être souligné. Cela n'affecte pas la couleur de soulignement. Un
Sous-litline code> utilise simplement la couleur de texte pour la couleur de soulignement. Le
linkcolor code> modifierait la couleur du soulignement (et du texte) uniquement pour un
clickableespan code> (ou
urlspan code>).
Il n'y a pas de méthode documentée pour définir la couleur de soulignement. Toutefois, il existe un TextPaint.sewunderline (int, float) float) qui vous permet de fournir la couleur et l'épaisseur de soulignement:
final class ColoredUnderlineSpan extends CharacterStyle
implements UpdateAppearance {
private final int mColor;
public ColoredUnderlineSpan(final int color) {
mColor = color;
}
@Override
public void updateDrawState(final TextPaint tp) {
try {
final Method method = TextPaint.class.getMethod("setUnderlineText",
Integer.TYPE,
Float.TYPE);
method.invoke(tp, mColor, 1.0f);
} catch (final Exception e) {
tp.setUnderlineText(true);
}
}
}
J'ai essayé cela et l'invocation fonctionne, mais la couleur soulignée est toujours noire. :(
Travaillé parfaitement pour moi, comme une note aux autres, le 1.0f est le multiplicateur d'épaisseur de la ligne. Une valeur de 1.0 signifie une épaisseur par défaut, 2,0 serait deux fois plus épais.
Cela fonctionne, mais la couleur et l'épaisseur ne sont pas restaurées à partir de
Dans TextPaint, il existe un champ «Sous-ligne» et Méthode 'SederlinNetext », indiqués et peuvent utiliser pour modifier la couleur de soulignement. Mais, ils sont du champ et de la méthode @hide ', de les utiliser, vous devez utiliser réfléchissant, comme celui-ci:
Field field = TextPaint.class.getDeclaredField("underlineColor"); field.setAccessible(true); field.set(ds, mUnderlineColor);
vraiment tard pour rencontrer ce scénario. Voici une autre façon, il serait de définir plusieurs couvre-mains sur le même contenu et le même contenu:
SpannableString content = new SpannableString("Ack:"); content.setSpan(new UnderlineSpan(), 0, content.length(), 0); content.setSpan( new ForegroundColorSpan(ContextCompat.getColor(context, R.color.red)), 0, content.length(), 0 ); tvAck.setText(content, TextView.BufferType.SPANNABLE);
Sa couleur de texte de changement avec soulignement ... non seulement souligner