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)
¿Hay alguna manera de aumentar / disminuir el espacio entre letras / caracteres? textScaleX - Literary escala las letras / caracteres.
Kaymatrix
2
La respuesta de @Barts hace lo que pregunta
bkurzius el
2
Escalar el texto en el eje X no es la forma correcta de manejar el kerning o el seguimiento en Android. Hay una API para Lollipop que logra esto, sin embargo, antes de Lollipop, necesitará una vista de texto personalizada para lograrlo.
Elliott
2
No sé cómo esta solución obtuvo tantos votos positivos (+33, -24) ¿las personas simplemente están votando a ciegas? letterSpacingvs textScaleXqué gran diferencia
Jimit Patel
230
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 .
Esto realmente no funciona cuando se establece en el XML. Me sale un error como este:"1.2dp" in attribute "letterSpacing" cannot be converted to float."
dopatraman
20
@dopatraman Debe omitir unidades, escriba solo el valor: android: letterSpacing = "1.2" en lugar de android: letterSpacing = "1.2dp"
JerabekJakub
12
Sabiendo que el 31% de los dispositivos no son compatibles con API 21, ¿cómo haría esto en versiones anteriores?
ninjaneer
25
Tenga en cuenta que el valor de letterSpacing no está en dp / sp, está en unidades 'EM'. Los valores típicos para una ligera expansión serán alrededor de 0.05. Los valores negativos ajustan el texto.
Cristan
25
Por alguna razón letterSpacingno estaba cambiando en la vista previa de AS. Tuve que ejecutar la aplicación en un dispositivo físico para ver el cambio.
quizás agregue el comentario de @ Evin1_ en su respuesta
Sarthak Mittal
¿Cuál es el máximo y mínimo de LetterSpacing compatible?
Jimit Patel
26
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;publicclassLetterSpacingTextViewextendsTextView{privatefloat letterSpacing =LetterSpacing.BIGGEST;privateCharSequence originalText ="";publicLetterSpacingTextView(Context context){super(context);}publicLetterSpacingTextView(Context context,AttributeSet attrs){super(context, attrs);
originalText =super.getText();
applyLetterSpacing();this.invalidate();}publicLetterSpacingTextView(Context context,AttributeSet attrs,int defStyle){super(context, attrs, defStyle);}publicfloat getLetterSpacing(){return letterSpacing;}publicvoid setLetterSpacing(float letterSpacing){this.letterSpacing = letterSpacing;
applyLetterSpacing();}@Overridepublicvoid setText(CharSequence text,BufferType type){
originalText = text;
applyLetterSpacing();}@OverridepublicCharSequence getText(){return originalText;}privatevoid applyLetterSpacing(){if(this==null||this.originalText ==null)return;StringBuilder builder =newStringBuilder();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 =newSpannableString(builder.toString());if(builder.toString().length()>1){for(int i =1; i < builder.toString().length(); i+=2){
finalText.setSpan(newScaleXSpan((letterSpacing+1)/10), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}}super.setText(finalText,BufferType.SPANNABLE);}publicclassLetterSpacing{publicfinalstaticfloat NORMAL =0;publicfinalstaticfloat NORMALBIG =(float)0.025;publicfinalstaticfloat BIG =(float)0.05;publicfinalstaticfloat BIGGEST =(float)0.2;}}
Si quieres usarlo programáticamente:
LetterSpacingTextView textView =newLetterSpacingTextView(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);
Como Android no admite tal cosa, puede hacerlo manualmente con FontCreator. Tiene buenas opciones para modificar la fuente. Utilicé esta herramienta para construir una fuente personalizada, incluso si lleva algún tiempo, pero siempre puedes usarla en tus proyectos.
android:letterSpacing=".05"
Donde .05 sería aproximadamente "50" en un programa como PhotoshopRespuestas:
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)
fuente
letterSpacing
vstextScaleX
qué gran diferenciaDesde 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 .
fuente
"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:
Menos espacio:
fuente
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:
Si quieres usarlo programáticamente:
fuente
null
registroapplyLetterSpacing
, 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
fuente
Creé una clase personalizada que extiende
TextView
y resuelve este problema ... Mira mi respuesta aquí =)fuente
Como Android no admite tal cosa, puede hacerlo manualmente con FontCreator. Tiene buenas opciones para modificar la fuente. Utilicé esta herramienta para construir una fuente personalizada, incluso si lleva algún tiempo, pero siempre puedes usarla en tus proyectos.
fuente
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%29fuente