博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TextView设置行间距、字体间距
阅读量:6193 次
发布时间:2019-06-21

本文共 2816 字,大约阅读时间需要 9 分钟。

hot3.png

一、设置行间距

1、设置行间距:android:lineSpacingExtra,取值范围:正数、负数和0,正数表示增加相应的大小,负数表示减少相应的大小,0表示无变化

2、设置行间距的倍数:android:lineSpacingMultiplier,取值范围:浮点数,如果值大于1.0表示增加行间距,如果值小于1.0表示减少行间距,等于1.0时表示无变化。

有时候在UI界面会失效,可以在代码动态设置

reuse_list_name.setLineSpacing(8,1);//第一个参数是字体大小,第二个是倍数

二、设置字体间距

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.NORMALtextView.setText("My text");//Add the textView in a layout, for instance:((LinearLayout) findViewById(R.id.myLinearLayout)).addView(textView);

转载于:https://my.oschina.net/u/3698786/blog/1857044

你可能感兴趣的文章
libcurl多线程超时设置不安全
查看>>
WinINet function(1)
查看>>
【转】Deep Learning(深度学习)学习笔记整理系列之(二)
查看>>
代码质量与上线压力
查看>>
系统时间不对 导至不能正常上网
查看>>
摄像头说明
查看>>
php 使用 ffmpeg 转换视频,截图,并生成缩略图
查看>>
jQuery EasyUI API 中文文档 - 加载器
查看>>
addedbytes.com 制作的速查表欣赏
查看>>
程序员好难...
查看>>
通过java的Runtime.getRuntime()和System.getProperties()来获取系统的信息
查看>>
Linux对文件归档和压缩(学习笔记八)
查看>>
launch文件概述---1
查看>>
WPF下载远程文件,并显示进度条和百分比
查看>>
实现app上对csdn的文章查看,以及文章中图片的保存 (制作csdn app 完结篇)
查看>>
Linq动态条件
查看>>
大圣归来:我们心中缺少一份英雄主义
查看>>
IIS配置错误信息输出
查看>>
excel使用技巧
查看>>
Flymeos插桩适配教程
查看>>