Android 中如何调节 TextView 的字间距
2014-05-13 00:15
274 查看
当前版本的 Android 似乎并未提供控制 TextView 的字间距方法。
搜索网上发现大量“教程”声称可以利用 TextView 的 setTextScaleX() 方法设置字间距,但从字面上(Scale)就可看出其实它是用于设置字体的缩放比率(试验结果亦是如此)。
最后从国外的一家论坛上发现一个解决方案:通过继承 TextView 并重写 setText() 和 getText() 方法,增加 setLetterSpacing()
等方法搞定该需求。
代码整理如下:
代码例——
应用例——
参考自: <http://stackoverflow.com/questions/1640659/how-to-adjust-text-kerning-in-android-textview/1644061#1644061>
搜索网上发现大量“教程”声称可以利用 TextView 的 setTextScaleX() 方法设置字间距,但从字面上(Scale)就可看出其实它是用于设置字体的缩放比率(试验结果亦是如此)。
最后从国外的一家论坛上发现一个解决方案:通过继承 TextView 并重写 setText() 和 getText() 方法,增加 setLetterSpacing()
等方法搞定该需求。
代码整理如下:
代码例——
/** * 示例:设置 TextView 的字间距 * @author Pedro Barros (pedrobarros.dev at gmail.com) * @since May 7, 2013 */ 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.NORMAL; private CharSequence originalText = ""; public LetterSpacingTextView(Context context) { super(context); } public LetterSpacingTextView(Context context, AttributeSet attrs){ super(context, attrs); } 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() { StringBuilder builder = new StringBuilder(); for(int i = 0; i < originalText.length(); i++) { builder.append(originalText.charAt(i)); 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; } }
应用例——
LetterSpacingTextView textView = new LetterSpacingTextView(context); textView.setLetterSpacing(10); //参数为 float 类型。可另设其他值如 0 或者默认值 LetterSpacingTextView.LetterSpacing.NORMAL textView.setText("My text"); //Add the textView in a layout, for instance: ((LinearLayout) findViewById(R.id.myLinearLayout)).addView(textView);
参考自: <http://stackoverflow.com/questions/1640659/how-to-adjust-text-kerning-in-android-textview/1644061#1644061>
相关文章推荐
- 【Android】如何改变TextView字体间距
- Android中如何使用View填充在多个TextView之间使之等间距
- android开发中 如何动态更新TextView的内容?
- Android如何使用java改变TextView的宽高,设置全屏
- android textview 行间距
- Android TextView字体大小调节框架QFontChangeLib介绍
- Android上如何让TextView上的字体放大且自滚动
- android TextView如何通过setCompoundDrawables调整文字和图片的位置(文字显示在图片内)?
- Android 如何改变TextView中个别字样式
- android TextView 如何实现消息滚动
- Android 如何实现TextView的跑马灯效果,即轮播
- android开发中 如何动态更新TextView的内容?
- android如何写一个循环文字滚动的TextView
- android-textview设置字体的行距和字间距
- Android中TextView长按复制时,屏幕顶部出现粘贴等选项的布局,这个布局占了顶部的位置,如何让这个布局浮动在顶部??
- android中Textview如何限制在一行显示且多余字符自动截断
- Android中EditText(或TextView)中的InputType类型含义与如何定义
- android开发中 如何动态更新TextView的内容?
- android textview设置字体的行距和字间距
- Android - TextView 设置行间距、行高