LetterSpacingTextView.java

package com.akm.akmviewpager;/*** Created by toge on 16/1/20.* 字间距*/import android.content.Context;
import android.content.res.TypedArray;
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 spacing = Spacing.NORMAL;private CharSequence originalText = "";public LetterSpacingTextView(Context context) {super(context);}public LetterSpacingTextView(Context context, AttributeSet attrs) {super(context, attrs);init(context, attrs);}public LetterSpacingTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init(context, attrs);}public float getSpacing() {return this.spacing;}private void init(Context context, AttributeSet attrs) {TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.LetterSpacingTextView);originalText = array.getString(R.styleable.LetterSpacingTextView_text);setSpacing(array.getFloat(R.styleable.LetterSpacingTextView_textSpacing, 0));array.recycle();}public void setSpacing(float spacing) {this.spacing = spacing;applySpacing();}@Overridepublic void setText(CharSequence text, BufferType type) {originalText = text;applySpacing();}@Overridepublic CharSequence getText() {return originalText;}private void applySpacing() {if (this == null || this.originalText == null) return;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((spacing + 1) / 10), i, i + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}}super.setText(finalText, BufferType.SPANNABLE);}public class Spacing {public final static float NORMAL = 0;}
}

attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="LetterSpacingTextView"><attr name="textSpacing" format="float"/><attr name="text" format="string"/></declare-styleable>
</resources>

xml中使用示例:

<?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:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.akm.akmviewpager.LetterSpacingTextView
        android:id="@+id/textView"android:layout_width="match_parent"android:layout_height="match_parent"app:text="暗淡轻黄体性柔,情疏迹远只香留。 何须浅碧轻红色,自是花中第一流。梅定妒,菊应羞,画栏开处冠中秋。 骚人可煞无情思,何事当年不见收。"app:textSpacing="5" />
</LinearLayout>

Java代码中使用示例:

 LetterSpacingTextView textView = (LetterSpacingTextView) findViewById(R.id.textView);textView.setText("出自宋代诗人李清照的《鹧鸪天·桂花》");textView.setSpacing(5);

改编自:How to adjust text kerning in Android TextView?
增加了xml配置字间距的属性

Android textView字间距自定义LetterSpacingTextView相关推荐

  1. Android Study 之真正解决TextView字间距,那些扯淡的边儿去吧

    LZ-Says:从个人的角度来说为什么要写博客,一方面可以拓展知识,通过分享去了解更多的知识:二方面可以通过优质的博文去推广自己. 写博客,就好像工作一样,要认真,要对自己写的东西负责,更要对别人看的 ...

  2. 自定义TextView字间距

    前言 说说今天遇到的问题吧. 老大说,搞个类似身份证原样的布局.其中一些TextView需要设置相对应的字间距,网上搜了n个,郁闷的我,真想骂娘,都是什么啊.不过,民间总有大神在,好歹解决了我的问题. ...

  3. Android TextView 字符间距设置

    需要动态设置textview字符间距,搜了很多都说是android:textScaleX可以设置文字间距,实际这属性是设置文字横向缩放的. 有一些通过String.xml或者html的方法可以实现,但 ...

  4. Android设置字间距和行间距

    设置字间距用: android:letterSpacing eg: android:letterSpacing = "1.2" 其相关方法是 setLetterSpacing(fl ...

  5. android textview字体贴底部,在android中底部设置textview

    我在Linearlayout里面有Textview.我希望它显示在底部,但它只显示在我的中心.我的xml文件看起来像下面的代码.我尝试用RelativeLayout替换LinearLayout但它没有 ...

  6. android+设置字体行高,TextView设置行间距、行高,以及字间距

    一. 设置TextView行间距.行高: Android系统中TextView有默认行间距,但是比较窄有的时候需要我们设置每行行间距. TextView为我们提供了相关设置属性android:line ...

  7. android字体行距,android textview设置字体的行距和字间距

    字间距 textView有一个属性android:textScaleX是调节字间距的,它的值是一个float型.查看源代码,默认textView 此属性是使用的是: android.internal. ...

  8. android+设置字体行高,android textview设置字体的行距和字间距

    android textview设置字体的行距和字间距 字间距 textView有一个属性android:textScaleX是调节字间距的,它的值是一个float型.查看源代码,默认textView ...

  9. Android基础篇 TextView 设置行间距字间距

    一.行间距 TextView 设置行间距可以通过设置TextView属性的 android:lineSpacingExtra 或 android:lineSpacingMultiplier 来达到效果 ...

最新文章

  1. 关于python3与python2同时存在情况下导入pyqt失败解决记录
  2. java 人脸识别 demo_Java 离线人脸识别 基于ArcFace 2.0 Demo
  3. sign check fail: check Sign and Data Fail!-错误处理
  4. 用虚拟网卡(softether)共享局域网资源
  5. mysql 屏蔽索引_mysql强制索引和禁止某个索引
  6. 【CF1312E】Array Shrinking(dp)
  7. GoAhead服务器编程
  8. 使用spss求标准化的线性回归方程
  9. Vue前端开发文档(完善中)
  10. 第一节:Ajax 入门及环境
  11. 曾风靡全国的五笔输入法要淘汰了?
  12. Win10 / Win11 wifi 已连接但是却依然显示小地球
  13. 【转】清除cookie的两个方法
  14. PS-InSAR大坝稳定性监测
  15. Hive 1.2.1 UI(HWI)配置
  16. MC-BE基岩版服务器搭建与日常维护
  17. 无线AP的注册上线方式
  18. PMP准考证什么时候下载
  19. multiplexer protocol研究
  20. vmware linux 不能解析dns,http 599 name lookup timed out

热门文章

  1. Intel RealSense T265鱼眼相机图像获取并矫正畸变(Unity)
  2. Alien Skin Exposure X4.07汉化版|PS胶片滤镜Exposure X4中文版支持PSCC2019
  3. 旧机械硬盘的资料如何快速拷贝到另一块机械硬盘?
  4. PHP 的代码简洁之道(Clean Code PHP)
  5. (一)少儿编程是什么、编程很难么,怎么学、学什么?
  6. 【勇敢牛牛,不怕困难】有手就行栏目:头歌教学平台 - 湖南工业大学刘强老师的C语言函数实战课堂作业答案 - > - > {求和+回文数计算+编写函数求表达式的值+阶乘数列+亲密数+公约数公倍数求解}
  7. linux 下 db2 常用的命令
  8. 吉林省计算机水平考试试题,2015吉林省计算机等级考试试题 二级ACCESS必过技巧...
  9. linux backlog详解
  10. Bat自动添加Cognos为信任站点