Come posso modificare la spaziatura delle lettere in una visualizzazione di testo? Sarà utile se ho testo HTML in esso (non posso usare webview nel mio codice).
PS Sto usando il mio carattere tipografico nella visualizzazione testo con testo HTML.
Come posso modificare la spaziatura delle lettere in una visualizzazione di testo? Sarà utile se ho testo HTML in esso (non posso usare webview nel mio codice).
PS Sto usando il mio carattere tipografico nella visualizzazione testo con testo HTML.
Risposte:
controlla Android: textScaleX
A seconda della spaziatura necessaria, questo potrebbe essere d'aiuto. Questa è l'unica cosa collegata in remoto alla spaziatura delle lettere nel TextView.
Modifica: vedere la risposta di @ JerabekJakub di seguito per un metodo aggiornato e migliore per farlo a partire da api 21 (Lollipop)
letterSpacing
vs textScaleX
che differenza enorme
Dall'API 21 esiste un'opzione per impostare la spaziatura delle lettere. Puoi chiamare il metodo setLetterSpacing o impostarlo in XML con l'attributo letterSpacing .
"1.2dp" in attribute "letterSpacing" cannot be converted to float."
letterSpacing
non stava cambiando nell'anteprima AS. Ho dovuto eseguire effettivamente l'app su un dispositivo fisico per vedere il cambiamento.
Più spazio:
android:letterSpacing="0.1"
Meno spazio:
android:letterSpacing="-0.07"
letterSpacing
è 0,0 secondo developer.android.com/reference/android/widget/…
Questa risposta è basata sulla risposta di Pedro ma modificata in modo che funzioni anche se l'attributo di testo è già impostato:
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;
}
}
Se vuoi usarlo in modo programmatico:
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
, ma a parte questo, salvavita!
dopo API> = 21 c'è un metodo integrato fornito da TextView chiamato setLetterSpacing
controlla questo per ulteriori informazioni
Ho creato una classe personalizzata che estende TextView
e risolve questo problema ... Controlla la mia risposta qui =)
Per incorporare il testo HTML nella tua visualizzazione di testo puoi usare la Html.fromHTML()
sintassi. Ulteriori informazioni si ottengono da http://developer.android.com/reference/android/text/Html.html#fromHtml%28java.lang.String%29
android:letterSpacing=".05"
Dove .05 sarebbe all'incirca "50" in un programma come Photoshop