Comment modifier l'espacement des lettres dans une vue de texte? Cela aidera-t-il si j'ai du texte HTML (je ne peux pas utiliser la vue Web dans mon code).
PS J'utilise ma propre police de caractères dans la vue de texte avec du texte HTML.
Comment modifier l'espacement des lettres dans une vue de texte? Cela aidera-t-il si j'ai du texte HTML (je ne peux pas utiliser la vue Web dans mon code).
PS J'utilise ma propre police de caractères dans la vue de texte avec du texte HTML.
Réponses:
consultez android: textScaleX
En fonction de l'espacement dont vous avez besoin, cela peut vous aider. C'est la seule chose liée à distance à l'espacement des lettres dans TextView.
Edit: veuillez voir la réponse de @ JerabekJakub ci-dessous pour une meilleure méthode mise à jour pour le faire en commençant par api 21 (Lollipop)
letterSpacing
vs textScaleX
quelle énorme différence
Depuis l'API 21, il existe une option d'espacement des lettres. Vous pouvez appeler la méthode setLetterSpacing ou la définir en XML avec l'attribut letterSpacing .
"1.2dp" in attribute "letterSpacing" cannot be converted to float."
letterSpacing
, cela ne changeait pas dans l'aperçu AS. J'ai dû exécuter l'application sur un appareil physique pour voir le changement.
Plus d'espace:
android:letterSpacing="0.1"
Moins d'espace:
android:letterSpacing="-0.07"
letterSpacing
est 0.0 selon developer.android.com/reference/android/widget/…
Cette réponse est basée sur la réponse de Pedro mais ajustée afin qu'elle fonctionne également si l'attribut de texte est déjà défini:
package nl.raakict.android.spc.widget;
import android.content.Context;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ScaleXSpan;
import android.util.AttributeSet;
import android.widget.TextView;
public class LetterSpacingTextView extends TextView {
private float letterSpacing = LetterSpacing.BIGGEST;
private CharSequence originalText = "";
public LetterSpacingTextView(Context context) {
super(context);
}
public LetterSpacingTextView(Context context, AttributeSet attrs){
super(context, attrs);
originalText = super.getText();
applyLetterSpacing();
this.invalidate();
}
public LetterSpacingTextView(Context context, AttributeSet attrs, int defStyle){
super(context, attrs, defStyle);
}
public float getLetterSpacing() {
return letterSpacing;
}
public void setLetterSpacing(float letterSpacing) {
this.letterSpacing = letterSpacing;
applyLetterSpacing();
}
@Override
public void setText(CharSequence text, BufferType type) {
originalText = text;
applyLetterSpacing();
}
@Override
public CharSequence getText() {
return originalText;
}
private void applyLetterSpacing() {
if (this == null || this.originalText == null) return;
StringBuilder builder = new StringBuilder();
for(int i = 0; i < originalText.length(); i++) {
String c = ""+ originalText.charAt(i);
builder.append(c.toLowerCase());
if(i+1 < originalText.length()) {
builder.append("\u00A0");
}
}
SpannableString finalText = new SpannableString(builder.toString());
if(builder.toString().length() > 1) {
for(int i = 1; i < builder.toString().length(); i+=2) {
finalText.setSpan(new ScaleXSpan((letterSpacing+1)/10), i, i+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
super.setText(finalText, BufferType.SPANNABLE);
}
public class LetterSpacing {
public final static float NORMAL = 0;
public final static float NORMALBIG = (float)0.025;
public final static float BIG = (float)0.05;
public final static float BIGGEST = (float)0.2;
}
}
Si vous souhaitez l'utiliser par programme:
LetterSpacingTextView textView = new LetterSpacingTextView(context);
textView.setSpacing(10); //Or any float. To reset to normal, use 0 or LetterSpacingTextView.Spacing.NORMAL
textView.setText("My text");
//Add the textView in a layout, for instance:
((LinearLayout) findViewById(R.id.myLinearLayout)).addView(textView);
null
enregistrement applyLetterSpacing
, mais à part ça, la vie sauve!
après API> = 21, il existe une méthode inbuild fournie par TextView appelée setLetterSpacing
vérifiez ceci pour plus
J'ai construit une classe personnalisée qui étend TextView
et résout ce problème ... Découvrez ma réponse ici =)
Comme Android ne prend pas en charge une telle chose, vous pouvez le faire manuellement avec FontCreator. Il a de bonnes options pour modifier la police. J'ai utilisé cet outil pour créer une police personnalisée, même si cela prend du temps, mais vous pouvez toujours l'utiliser dans vos projets.
Pour incorporer du texte HTML dans votre vue de texte, vous pouvez utiliser la Html.fromHTML()
syntaxe. Vous obtiendrez plus d'informations sur http://developer.android.com/reference/android/text/Html.html#fromHtml%28java.lang.String%29
android:letterSpacing=".05"
Où .05 serait à peu près "50" dans un programme comme Photoshop