Android本身没提供真正改变字间距的方法

直接上代码

    public class MyTextView extends TextView {private String content;private int width;private Paint paint;private int textHeight;private int yPadding;int count;//记录每个字的二维数组int[][] position;private int color;private int size;private String s;private boolean mInitialized = false;public MyTextView(Context context) {this(context, null);}public MyTextView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public MyTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);TypedArray array = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomTextView, defStyle, 0);int n = array.getIndexCount();for (int i=0; i<n; i++){int attr = array.getIndex(i);switch (attr){case R.styleable.CustomTextView_textColor:color = array.getColor(attr, Color.BLUE);break;case R.styleable.CustomTextView_textSize:size = array.getDimensionPixelSize(attr, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 20, getResources().getDisplayMetrics()));break;case R.styleable.CustomTextView_text:s = array.getString(attr);break;}}array.recycle();paint = new Paint();paint.setColor(color);paint.setTypeface(Typeface.DEFAULT);paint.setTextSize(size);Paint.FontMetrics fm = paint.getFontMetrics();// 得到系统默认字体属性textHeight = (int) (Math.ceil(fm.descent - fm.ascent - size/4));// 获得字体高度yPadding = Utils.dipToPx(this.getContext(), 10f);getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@TargetApi(Build.VERSION_CODES.JELLY_BEAN)@Overridepublic void onGlobalLayout() {if (!mInitialized) {mInitialized = true;getViewTreeObserver().removeOnGlobalLayoutListener(this);width = getMeasuredWidth();setText(s);}}});}public void setText(String str) {if (str == null)str = "";if (!mInitialized) {ViewGroup.LayoutParams params = getLayoutParams();width = params.width;mInitialized = true;}setPosition(str);//重新画控件this.invalidate();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (!TextUtils.isEmpty(content)) {for (int i = 0; i < count; i++) {canvas.drawText(String.valueOf(content.charAt(i)), position[i][0], position[i][1], paint);}}}public void setPosition(String content){this.content = content;count = content.length();int x = 0;char ch;position = new int[count][2];float textWith = 0f;for (int i=0; i<count; i++){ch = content.charAt(i);String str = String.valueOf(ch);Rect rect = new Rect();paint.getTextBounds(str, 0, 1, rect);int strwidth = rect.width();textWith = Math.max(strwidth, textWith);}for (int i=0; i<count; i++){if (i != 0){x += (width - count * textWith)/(count - 1);}position[i][0] = x;position[i][1] = textHeight;x += textWith;this.setHeight(textHeight + yPadding);}}
}
    <declare-styleable name="CustomTextView"><attr name="textColor" format="color" /><attr name="textSize" format="dimension" /><attr name="text" format="string" /></declare-styleable>

使用例子

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><com.gzfgeh.CustomTextView.MyTextView
        android:layout_width="100dp"android:layout_height="wrap_content"android:id="@+id/text1"app:textSize="20px"app:textColor="@android:color/black"/><com.gzfgeh.CustomTextView.MyTextView
        android:layout_width="100dp"android:layout_height="wrap_content"android:id="@+id/text2"app:textSize="30px"app:textColor="@android:color/holo_blue_bright"/><com.gzfgeh.CustomTextView.MyTextView
        android:layout_width="100dp"android:layout_height="wrap_content"android:id="@+id/text3"app:textSize="30px"app:textColor="@android:color/holo_blue_bright"app:text="我非常好"/><RelativeLayout
        android:layout_width="wrap_content"android:layout_height="wrap_content"><com.gzfgeh.CustomTextView.MyTextView
            android:layout_width="100dp"android:layout_height="wrap_content"android:id="@+id/text4"app:textSize="30px"app:textColor="@android:color/holo_blue_bright"app:text="我非常好"/><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/text4"android:text="123456"android:textSize="36px"android:layout_toRightOf="@+id/text4"/></RelativeLayout></LinearLayout>

真正改变字间距的方法相关推荐

  1. iOS UIlabel文字排版(改变字间距行间距)分类

    在iOS开发中经常会用到UIlabel来展示一些文字性的内容,但是默认的文字排版会觉得有些挤,为了更美观也更易于阅读我们可以通过某些方法将UIlabel的行间距和字间距按照需要调节. 比如一个Labe ...

  2. coreldraw x8段落_CorelDRAWx8调整字间距的方法

    CorelDRAWx8如何调整字间距? 方法步骤: 方法一:"形状"工具调整字间距 1.打开cdr软件,用文本工具打上需要调整字符间距的文字内容. 图1:打开cdr软件 2. 在工 ...

  3. ai字体行间距怎么调整_ai字间距怎么调-调整ai字间距的方法 - 河东软件园

    Adobe Illustrator是用来处理矢量图形的工具之一,相信经常接触设计的用户都会使用它吧?这款软件在学习制作它的效果制作技巧之前我们应该要对它的工具有所了解,很多用户在正在开始接触之前会使用 ...

  4. ios label文字行间距_iOS设置UILabel文字的行间距和字间距

    释放双眼,带上耳机,听听看~! 可以在UILabel的Category中提供如下几个方法: .h文件 @interface UILabel (ChangeLineSpaceAndWordSpace) ...

  5. UILabel的行间距,字间距处理

    啥都不说了,直接上代码,做了一个Category #import <UIKit/UIKit.h> @interface UILabel (ChangeLineSpaceAndWordSpa ...

  6. PHP字体间距设置,wps字间距怎么调整

    调整wps字间距的方法:首先打开wps文档,选中需要调整字间距的文本文字:然后点击鼠标右键,在弹出的下拉菜单中,点击"字体"选项:最后在"字体"设置窗口中,点击 ...

  7. Android多屏幕适配之字体大小、行间距和字间距

    code小生,一个专注Android领域的技术平台 作者:星际旅行android 地址:https://www.jianshu.com/p/730d0b2c1c5d 声明:本文已获星际旅行androi ...

  8. excel缩字间距_“EXCEL中如何调整字间距?“excel缩小字符间距

    EXCEL中如何调整字间距? EXCEL中调整字间距,可以通过设置文本对齐方"分散对齐",然后调整单元调整字间距. 方法步骤如下: 1.打开需要操作的EXCEL表格,选中需要调整字 ...

  9. docx行间距怎么设置_Word如何调整字间距,行间距.docx

    PAGE PAGE #/ 2 Word 如何调整字间距.行间距 字间距决定行内文字之间的距离.行距决定段落中各行文字之间的垂直距 离.段落间距决定段落上方或下方的间距量. 一.调整汉字与英文字母.数字 ...

最新文章

  1. C/C++:*(p++)慎用!!!!!
  2. MongoDB numa系列问题一:[initandlisten] connection refused because too many open connections:
  3. PAT甲级1077 Kuchiguse:[C++题解]字符串、最长公共后缀
  4. 搭建本地wordpress
  5. git语言包安装_Git分布式版本管理系统快速入门指南
  6. VS设置程序启动权限为管理员权限
  7. Enterprise Library v5.0 -- Data Access Application Block 开发向导(3)
  8. 【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)
  9. 团体程序设计天梯赛-练习集-L1-036. A乘以B
  10. 【收藏】基于Dockerfile搭建JAVA Tomcat运行环境
  11. scan ip和vip的关系疑惑
  12. Windows XP 按权限设置共享
  13. kubernetes 创建pod /merged/dev/shm: invalid argument
  14. 如何配置FMS边缘服务器
  15. android 远程管理,教你如何在Android上远程控制电脑
  16. 触摸按键(电容式按键)
  17. 2017年度全球一级市场“投资龙虎榜”发布 | 钛媒体Pro独家
  18. 3dsmax 扫描功能 点连接 绘制连接线
  19. bandgap基本知识(转载)
  20. 大家在人生低谷时有多惨,怎么熬过来的(五)

热门文章

  1. PowerDesigner16.6最新安装包
  2. “裸辞”真的就会没前途吗?面对他你是会 “雪上加霜“,还是“绝处逢生“?
  3. 新买的阿里云ECS基本安全运维
  4. LCR表测电容怎么实现连续测试?ATECLOUD云测试平台帮您解决
  5. 《算法导论》第四章-第3节_练习(参考答案)
  6. 服务器网络机柜的保养维护,保养维护|服务器机柜保养维护有哪些注意细节?...
  7. React(Taro)+Go+AKS快速构建微信小程序之一:AKS上的第一个Go API
  8. 蜣螂优化(DBO)算法(含MATLAB代码)
  9. AWM在电线中是什么意思?
  10. ms17-010 ms10-046 ms08-067漏洞利用