¿Cómo puedo cambiar el espacio entre letras en una vista de texto? Ayudará si tengo texto HTML (no puedo usar webview en mi código).
PD: Estoy usando mi propio tipo de letra en la vista de texto con texto HTML.
¿Cómo puedo cambiar el espacio entre letras en una vista de texto? Ayudará si tengo texto HTML (no puedo usar webview en mi código).
PD: Estoy usando mi propio tipo de letra en la vista de texto con texto HTML.
Respuestas:
echa un vistazo a android: textScaleX
Dependiendo de cuánto espacio necesite, esto podría ayudar. Esa es la única cosa remotamente relacionada con el espacio entre letras en TextView.
Editar: consulte la respuesta de @ JerabekJakub a continuación para obtener un método actualizado y mejor para hacerlo, comenzando con la API 21 (Lollipop)
letterSpacing
vs textScaleX
qué gran diferencia
Desde API 21 hay una opción para establecer el espaciado entre letras. Puede llamar al método setLetterSpacing o establecerlo en XML con el atributo letterSpacing .
"1.2dp" in attribute "letterSpacing" cannot be converted to float."
letterSpacing
no estaba cambiando en la vista previa de AS. Tuve que ejecutar la aplicación en un dispositivo físico para ver el cambio.
Más espacio:
android:letterSpacing="0.1"
Menos espacio:
android:letterSpacing="-0.07"
letterSpacing
es 0.0 según developer.android.com/reference/android/widget/…
Esta respuesta se basa en la respuesta de Pedro pero ajustada, por lo que también funciona si el atributo de texto ya está configurado:
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 quieres usarlo programáticamente:
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
registro applyLetterSpacing
, pero aparte de eso, ¡salva vidas!
después de API> = 21 hay un método incorporado incorporado por TextView llamado setLetterSpacing
mira esto para más
Creé una clase personalizada que extiende TextView
y resuelve este problema ... Mira mi respuesta aquí =)
Para incrustar texto HTML en su vista de texto, puede usar la Html.fromHTML()
sintaxis. Más información obtendrá de http://developer.android.com/reference/android/text/Html.html#fromHtml%28java.lang.String%29
android:letterSpacing=".05"
Donde .05 sería aproximadamente "50" en un programa como Photoshop