Comment ajuster la hauteur de ligne dans le TextView avec plusieurs tailles de type?
J'ai un TextView qui est titulaire d'un Spannable chaîne. La chaîne contient un tas de texte, le premier mot de ce qui est le double de la typesize que le reste de la chaîne.
Le problème est que la ligne d'espacement entre la première et la deuxième ligne est beaucoup plus grand que l'espacement entre les lignes suivantes en raison de l'augmentation de la taille du premier mot.
http://img.skitch.com/20100615-fwd2aehbsgaby8s2s9psx3wwii.png
La spannable chaîne a été créée en utilisant l'extrait de code suivant:
//Price
CharSequence text = "$30 Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
final Pattern priceRegex = Pattern.compile("^(.[0-9]+)\\s.*");
final Matcher m = priceRegex.matcher(text!=null ? text : "");
if( m.matches() ) {
text = new SpannableString(text);
((SpannableString)text).setSpan(new RelativeSizeSpan(2), 0, m.end(1), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
Comment puis-je réparer mon TextView, de sorte que toutes les lignes ont le même espacement?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer d'utiliser l'une de ces TextView propriétés:
pour au moins essayer de faire toutes les lignes de la même hauteur (même que la première).
android:lineSpacingMultiplier
est uniquement disponible dans l'API de niveau 16 et plus tard.setLineSpacing()
etandroid:lineSpacingMultiplier
est disponible à partir de l'API de niveau 1. MéthodegetLineSpacing()
est disponible à partir de l'API de niveau 16. Vous pouvez vous référer à ceci: developer.android.com/reference/android/widget/...Après beaucoup d'essais et d'erreurs, j'ai un très hacky solution de travail:
J'ai ajouté spannables avec la même doublé la taille du texte, comme l'a souligné parole à chaque espace à l'intérieur du texte. De cette manière, l'ensemble du TextView eu la même (grande) l'espacement des lignes. Être conscient que vous ne pouvez pas réutiliser un spannable.
Puis j'ai donné le TextView négatif lineSpacingExtra donc l'espacement de ligne avait l'air sympa à nouveau.
Pour éviter unnatuarally de larges espaces en raison de l'augmentation de la taille du texte, j'ai ajouté un ScaleXSpan à chaque espace, de mise à l'échelle à 50% de leur grande taille.
Cette méthode devrait fonctionner, même pour TextViews qui détiennent des chaînes localisées (où vous ne savez jamais à quel poste l'a souligné mot apparaît ou combien de temps votre ligne sera) aussi longtemps que chaque ligne est titulaire d'au moins un caractère d'espace.
J'ai écrit cette fonction:
ENTRÉE
LinearLayout ll :
Chaîne argent:
Chaîne de texte:
Contexte mContext
QUOI FAIRE
NOTE
Je pense que vous ne pouvez pas :(.
Android os calculer les écarts entre les lignes selon la taille de la police, de sorte que " 30$", fait de l'écart entre la ligne 1 et la ligne 2 pour être plus grand, et je ne sais pas si il est possible de contrôler cette lacune de taille.
Pour résoudre ce problème, vous pouvez facilement étendre LinearLayuot et de mettre de l'orientation verticale. Que de mettre 2 textviews avec fillparent pour la largeur....
et de mettre en œuvre la fonction , disons setNoGapText(String s);
et dans cette fonction, vous pouvez mesurer le texte qui peut être adapté dans le textview sur le dessus(ce qui peut me faire avec textutils), et que le reste du texte sera adapté sur textview2...
entre ce textview vous pouvez jouer avec un rembourrage et les marges propriétés afin que les écarts entre les lignes de regarder juste comme vous les imaginez.