android - separen - espacio entre caracteres excel
¿Cómo cambiar el espaciado entre letras en una vista de texto? (7)
¿Cómo puedo cambiar el espacio entre letras en una vista de texto? ¿Ayuda si tengo texto HTML en él (no puedo usar webview en mi código).
PD. Estoy usando mi propio tipo de letra en la vista de texto con texto HTML.
Como Android no es compatible con tal cosa, puede hacerlo manualmente con FontCreator. Tiene buenas opciones para modificar fuentes. Utilicé esta herramienta para construir una fuente personalizada, incluso si toma algunas veces, pero siempre puedes usarla en tus proyectos.
Desde API 21 hay una opción de configurar el espacio entre letras. Puede llamar al método setLetterSpacing o configurarlo en XML con el atributo letterSpacing .
Esta respuesta se basa en la respuesta de Pedro pero ajustada para que también funcione 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);
Para incrustar texto HTML en su vista de texto, puede usar la sintaxis Html.fromHTML()
. Más información obtendrá de http://developer.android.com/reference/android/text/Html.html#fromHtml%28java.lang.String%29
después de API> = 21 hay un método inbuild proporcionado por TextView llamado setLetterSpacing
setLetterSpacing para más
echa un vistazo a android:textScaleX
Dependiendo de la cantidad de espacio que necesita, esto podría ayudar. Esa es la única cosa remotamente relacionada con el espaciado entre letras en TextView.
Editar: consulte la respuesta de @ JerabekJakub a continuación para obtener un método actualizado y mejor para hacerlo a partir de la aplicación 21 (Lollipop)
TextView
una clase personalizada que amplía TextView
y resuelve este problema ... Mira mi respuesta here =)