Wie kann ich den Buchstabenabstand in einer Textansicht ändern? Hilft es, wenn ich HTML-Text darin habe (ich kann Webview nicht in meinem Code verwenden).
PS Ich verwende meine eigene Schrift in der Textansicht mit HTML-Text.
Wie kann ich den Buchstabenabstand in einer Textansicht ändern? Hilft es, wenn ich HTML-Text darin habe (ich kann Webview nicht in meinem Code verwenden).
PS Ich verwende meine eigene Schrift in der Textansicht mit HTML-Text.
Antworten:
check out android: textScaleX
Je nachdem, wie viel Abstand Sie benötigen, kann dies hilfreich sein. Dies ist das einzige, was im Zusammenhang mit dem Buchstabenabstand in der Textansicht steht.
Edit: siehe @ JerabekJakub Antwort unten für eine aktualisierte, bessere Methode , dies mit 21 api beginnen zu tun (Lollipop)
letterSpacing
vs textScaleX
was für ein großer Unterschied
Seit API 21 gibt es eine Option zum Festlegen des Buchstabenabstands. Sie können die Methode setLetterSpacing aufrufen oder in XML mit dem Attribut letterSpacing festlegen .
"1.2dp" in attribute "letterSpacing" cannot be converted to float."
letterSpacing
änderte sich nichts in der AS-Vorschau. Ich musste die App tatsächlich auf einem physischen Gerät ausführen, um die Änderung zu sehen.
Mehr Platz:
android:letterSpacing="0.1"
Wenig Platz:
android:letterSpacing="-0.07"
letterSpacing
ist 0.0 laut developer.android.com/reference/android/widget/…
Diese Antwort basiert auf Pedros Antwort, wurde jedoch angepasst, sodass sie auch funktioniert, wenn das Textattribut bereits festgelegt ist:
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;
}
}
Wenn Sie es programmgesteuert verwenden möchten:
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
Check-in applyLetterSpacing
, aber ansonsten Lebensretter!
Nach API> = 21 wird die von TextView bereitgestellte Inbuild-Methode aufgerufen setLetterSpacing
Überprüfen Sie dies für mehr
Ich habe eine benutzerdefinierte Klasse erstellt, TextView
die dieses Problem erweitert und löst ... Überprüfen Sie meine Antwort hier =)
Da Android so etwas nicht unterstützt, können Sie es manuell mit FontCreator tun. Es bietet gute Optionen zum Ändern von Schriftarten. Ich habe dieses Tool verwendet, um eine benutzerdefinierte Schriftart zu erstellen, auch wenn dies einige Zeit in Anspruch nimmt, aber Sie können sie jederzeit in Ihren Projekten verwenden.
Zum Einbetten von HTML-Text in Ihre Textansicht können Sie die Html.fromHTML()
Syntax verwenden. Weitere Informationen erhalten Sie unter http://developer.android.com/reference/android/text/Html.html#fromHtml%28java.lang.String%29
android:letterSpacing=".05"
wo