Jak mogę zmienić odstępy między literami w widoku tekstu? Czy to pomoże, jeśli mam w nim tekst HTML (nie mogę użyć webview w moim kodzie).
PS Używam własnego kroju w widoku tekstowym z tekstem HTML.
Jak mogę zmienić odstępy między literami w widoku tekstu? Czy to pomoże, jeśli mam w nim tekst HTML (nie mogę użyć webview w moim kodzie).
PS Używam własnego kroju w widoku tekstowym z tekstem HTML.
Odpowiedzi:
sprawdź android: textScaleX
W zależności od potrzebnych odstępów może to pomóc. To jedyna rzecz, która jest zdalnie związana z odstępami między literami w TextView.
Edycja: zobacz odpowiedź @ JerabekJakub poniżej, aby uzyskać zaktualizowaną, lepszą metodę, aby to zrobić, zaczynając od api 21 (Lollipop)
letterSpacing
vs textScaleX
jaka ogromna różnica
Od API 21 istnieje możliwość ustawienia odstępów między literami. Możesz wywołać metodę setLetterSpacing lub ustawić ją w XML z atrybutem letterSpacing .
"1.2dp" in attribute "letterSpacing" cannot be converted to float."
letterSpacing
nie zmienia się w podglądzie AS. Musiałem faktycznie uruchomić aplikację na urządzeniu fizycznym, aby zobaczyć zmianę.
Więcej przestrzeni:
android:letterSpacing="0.1"
Mniej miejsca:
android:letterSpacing="-0.07"
letterSpacing
to 0,0 według developer.android.com/reference/android/widget/ ...
Ta odpowiedź jest oparta na odpowiedzi Pedro, ale została dostosowana, więc działa również, jeśli atrybut tekstu jest już ustawiony:
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;
}
}
Jeśli chcesz używać go programowo:
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
zameldowania applyLetterSpacing
, ale poza tym ratuje życie!
po API> = 21 istnieje metoda wbudowana dostarczana przez TextView o nazwie setLetterSpacing
sprawdź to po więcej
Zbudowałem niestandardową klasę, która rozszerza TextView
i rozwiązuje ten problem ... Sprawdź moją odpowiedź tutaj =)
Aby osadzić tekst HTML w widoku tekstu, możesz użyć Html.fromHTML()
składni. Więcej informacji uzyskasz ze strony http://developer.android.com/reference/android/text/Html.html#fromHtml%28java.lang.String%29
android:letterSpacing=".05"
Gdzie .05 byłoby mniej więcej „50” w programie takim jak Photoshop