如何更改Textview中的字母间距?
我怎样才能改变textview中的字母间距? 它会帮助,如果我有HTML文本(我不能在我的代码中使用webview)。
PS我在HTML文本的textview中使用我自己的字体。
看看android:textScaleX
取决于你需要多less空间,这可能会有所帮助。 这是唯一与TextView中的字母间距有关的事情。
编辑: 请参阅@ JerabekJakub的回应下面的更新,更好的方法来做到这一点,开始与API 21(棒棒糖)
由于API 21有一个选项设置字母间距。 您可以调用方法setLetterSpacing或使用属性letterSpacing将其设置为XML。
这个答案是基于佩德罗的答案,但调整,所以它也适用于文本属性已经设置:
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; } }
如果你想以编程方式使用它:
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);
在API> = 21之后,由TextView提供的称为setLetterSpacing
inbuild方法
检查这个更多
我build立了一个扩展TextView
的自定义类,并解决了这个问题… 在这里查看我的答案=)
由于android不支持这样的事情,你可以手动使用FontCreator。 它有很好的字体修改选项。 我使用这个工具来build立一个自定义的字体,即使它需要一些时间,但你总是可以在你的项目中使用它。
为了在你的textview中embeddedHTML文本,你可以使用Html.fromHTML()
语法。 更多的信息,你会从http://developer.android.com/reference/android/text/Html.html#fromHtml%28java.lang.String%29