Comment faire de l'espacement entre les lettres d'un TextView Android?
J'ai besoin de faire de la conception de photoshop mise en page. Il y a quelques polices sur les mises en page.
Designer m'a donné ce polices. Mais sur la mise en page dans photoshop, il utiliser l'espacement entre les lettres. Comment je peux réaliser cela dans textView android? J'ai trouvé une solution:
mais si je fais myTextView extends TextView
il fonctionne mal. Si je adapter pour un élaborer, sur l'appareil avec biger d'affichage, l'espacement entre les lettres augmentation n'est pas proportionnelle.
MODIFIER
public class MyTextView extends TextView {
private float letterSpacing = 0.0f;
private CharSequence originalText = "";
private Typeface typeface;
public MyTextView(Context context) {
this(context, null);
isInEditMode();
}
public MyTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
isInEditMode();
}
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray attributesArray = getResources().obtainAttributes(attrs, R.styleable.MyTextView);
letterSpacing = attributesArray.getDimension(R.styleable.MyTextView_letterSpacing, 0.0f);
String fontName = attributesArray.getString(R.styleable.MyTextView_fontName);
if(!this.isInEditMode()) {
if (null == fontName) {
typeface = Fonts.getBlockBertholdRegular(context);
} else {
typeface = Fonts.get(context, fontName);
}
super.setTypeface(typeface);
}
originalText = super.getText();
applyLetterSpacing();
this.invalidate();
}
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.toUpperCase());
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);
if(!this.isInEditMode()) {
super.setTypeface(typeface);
}
}
}
"Si je adapter pour concevoir un" Pourriez-vous nous montrer le code qui vous le faire?
code no. Je le fais redimensionner jusqu'à ce qu'ils coïncident avec photoshop.
Avez-vous essayez de créer un personnalisé
Oui, mais vous n'avez pas à fournir le code ou les explications de ce qui s'est passé! merci pour le code.
vous pouvez également afficher cette réponse ensemble stackoverflow.com/questions/1640659/...
code no. Je le fais redimensionner jusqu'à ce qu'ils coïncident avec photoshop.
Avez-vous essayez de créer un personnalisé
textView
? (myTextView extends TextView
) Dans l'affirmative, ce qui fonctionne mal?Oui, mais vous n'avez pas à fournir le code ou les explications de ce qui s'est passé! merci pour le code.
vous pouvez également afficher cette réponse ensemble stackoverflow.com/questions/1640659/...
OriginalL'auteur ip696 | 2015-04-16
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser la nouvelle TextView méthode de l'API
setLetterSpacing
.Voir ici
MODIFIER
Vous pouvez également créer votre propre police avec des espaces à l'intérieur de la police elle-même et l'appliquer à votre TextView.
Vous avez répondu exactement la même chose que j'ai fait, et vous dire que ma réponse est incorrecte?
vérifiez le mot que vous verrez la différence. Je ne poste ma réponse à un commentaire d'abord, vous pouvez voir le journal de l'heure
Wooops. Merci, faute de frappe.
Je vais modifier ma réponse avec des liens pour vous aider
OriginalL'auteur Docteur
Depuis API 21 Vous pouvez utiliser
Documentation peut être trouvée ici
oui c'est disponible à partir de l'API 21
Je l'ai essayé sur l'API 21 et il ne fonctionne pas bien
Il devrait fonctionner. Je suis en utilisant le même codage sur mon programme dès maintenant sur l'API 21
Upvoted comme vous, en effet, répondu avant moi. Désolé!
OriginalL'auteur surhidamatya