android:textScaleX是调节字间距的,它的值是一个float型。默认textView 此属性是使用的是:

Android.internal.R.styleable.TextView_textScaleXsetTextScaleX(a.getFloat(attr, 1.0f));

设置TextView的行间距和行间距的倍数

android:lineSpacingExtra  
android:lineSpacingMultiplier

设置字间距需要自定义控件

public class MyTextView extends TextView {  private String content;  private int width;  private Paint paint;  private int xPadding;  private int yPadding;  private int textHeight;  private int xPaddingMin;  int count;  //记录每个字的二维数组  int[][] position;  public MyTextView(Context context) {    super(context);    init();  }  public MyTextView(Context context, AttributeSet attrs) {    super(context, attrs);    init();  }  public MyTextView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);    init();  }  public void setText(String str) {    width = this.getWidth();    getPositions(str);    //重新画控件    this.invalidate();  }  public void init() {    paint = new Paint();    paint.setColor(Color.parseColor("#888888"));    paint.setTypeface(Typeface.DEFAULT);    paint.setTextSize(dip2px(this.getContext(), 14f));    Paint.FontMetrics fm = paint.getFontMetrics();// 得到系统默认字体属性    textHeight = (int) (Math.ceil(fm.descent - fm.top) + 2);// 获得字体高度    //字间距    xPadding = dip2px(this.getContext(), 4f);    //行间距    yPadding = dip2px(this.getContext(), 10f);    //比较小的字间距(字母和数字应紧凑)    xPaddingMin = dip2px(this.getContext(), 2f);  }  @Override  protected 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 getPositions(String content) {    this.content = content;    char ch;    //输入点的 x的坐标    int x = 0;    //当前行数    int lineNum = 1;    count = content.length();    //初始化字体位置数组    position=new int[count][2];    for (int i = 0; i < count; i++) {      ch =content.charAt(i);      String str = String.valueOf(ch);      //根据画笔获得每一个字符的显示的rect 就是包围框(获得字符宽度)      Rect rect = new Rect();      paint.getTextBounds(str, 0, 1, rect);      int strwidth = rect.width();      //对有些标点做些处理      if (str.equals("《") || str.equals("(")) {        strwidth += xPaddingMin * 2;      }      //当前行的宽度      float textWith = strwidth;      //没画字前预判看是否会出界      x += textWith;      //出界就换行      if (x > width) {        lineNum++;// 真实的行数加一        x = 0;      } else {        //回到预判前的位置        x -= textWith;      }      //记录每一个字的位置      position[i][0]=x;      position[i][1]=textHeight * lineNum + yPadding * (lineNum - 1);      //判断是否是数字还是字母 (数字和字母应该紧凑点)      //每次输入完毕 进入下一个输入位置准备就绪      if (isNumOrLetters(str)) {        x += textWith + xPaddingMin;      } else {        x += textWith + xPadding;      }    }    //根据所画的内容设置控件的高度    this.setHeight((textHeight +yPadding) * lineNum);  }  //工具类:判断是否是字母或者数字  public boolean isNumOrLetters(String str)  {    String regEx="^[A-Za-z0-9_]+$";    Pattern p=Pattern.compile(regEx);    Matcher m=p.matcher(str);    return m.matches();  }   // 工具类:在代码中使用dp的方法(因为代码中直接用数字表示的是像素)  public static int dip2px(Context context, float dip) {    final float scale = context.getResources().getDisplayMetrics().density;    return (int) (dip * scale + 0.5f);  }}


更多相关文章

  1. ListView去掉中间的分割线和设置Item之间的间距
  2. 布局中文件中【控件间距参数详解以及单位选择】
  3. android EditText中的inputType
  4. Android(安卓)Studio 打包以及获取数字签名
  5. android EditText中的inputType
  6. Android(安卓)数字签名
  7. Android(安卓)默认Tab标签大小及间距修改
  8. Android(安卓)背景透明度设置和设置GridView元素间距
  9. android 重写TextView 实现文字整齐排版

随机推荐

  1. Android材料设计兼容函数库(Design Suppor
  2. Android性能优化之系统显示原理
  3. android 测量控件视图的方法
  4. 2016年 代做安卓毕业设计 Android毕业设
  5. [置顶] android实现向右滑动返回功能
  6. Android上利用SDK的BluetoothAPI实现传送
  7. Android(安卓)的网络判定(网络连接类型和
  8. Android(安卓)使用MVPHelper工具生成,MVPD
  9. Android(安卓)关于接口回调原理的解析
  10. 在Android(安卓)Studio上搭建OpenCV 开发