设置TextView的行间距

时间:2021-08-09 06:10:36

1.如果您是要设置TextView的行间距 请使用(不用看2了)

[html] view plaincopy设置TextView的行间距设置TextView的行间距
  1. android:lineSpacingMultiplier="1.8"  
2.如果您是要设置字间距需要自定义控件
[java] view plaincopy设置TextView的行间距设置TextView的行间距
  1. <pre name="code" class="java">import android.content.Context;  
  2. import android.graphics.*;  
  3. import android.text.TextUtils;  
  4. import android.util.AttributeSet;  
  5. import android.widget.TextView;  
  6.   
  7. import java.util.regex.Matcher;  
  8. import java.util.regex.Pattern;  
  9.   
  10. /** 
  11.  * Created by mrni-mac on 14-11-25. 
  12.  */  
  13. public class MyTextView extends TextView {  
  14.     private String content;  
  15.     private int width;  
  16.     private Paint paint;  
  17.     private int xPadding;  
  18.     private int yPadding;  
  19.     private int textHeight;  
  20.     private int xPaddingMin;  
  21.     int count;  
  22.     //记录每个字的二维数组  
  23.     int[][] position;  
  24.   
  25.     public MyTextView(Context context) {  
  26.         super(context);  
  27.         init();  
  28.     }  
  29.   
  30.     public MyTextView(Context context, AttributeSet attrs) {  
  31.         super(context, attrs);  
  32.         init();  
  33.     }  
  34.   
  35.     public MyTextView(Context context, AttributeSet attrs, int defStyle) {  
  36.         super(context, attrs, defStyle);  
  37.         init();  
  38.     }  
  39.   
  40.     public void setText(String str) {  
  41.         width = this.getWidth();  
  42.         getPositions(str);  
  43.         //重新画控件  
  44.         this.invalidate();  
  45.     }  
  46.     public void init() {  
  47.   
  48.         paint = new Paint();  
  49.         paint.setColor(Color.parseColor("#888888"));  
  50.         paint.setTypeface(Typeface.DEFAULT);  
  51.         paint.setTextSize(dip2px(this.getContext(), 14f));  
  52.         Paint.FontMetrics fm = paint.getFontMetrics();// 得到系统默认字体属性  
  53.         textHeight = (int) (Math.ceil(fm.descent - fm.top) + 2);// 获得字体高度  
  54.         //字间距  
  55.         xPadding = dip2px(this.getContext(), 4f);  
  56.         //行间距  
  57.         yPadding = dip2px(this.getContext(), 10f);  
  58.         //比较小的字间距(字母和数字应紧凑)  
  59.         xPaddingMin = dip2px(this.getContext(), 2f);  
  60.   
  61.     }  
  62.   
  63.   
  64.     @Override  
  65.     protected void onDraw(Canvas canvas) {  
  66.         super.onDraw(canvas);  
  67.         if (!TextUtils.isEmpty(content)) {  
  68.             for (int i = 0; i < count; i++) {  
  69.                 canvas.drawText(String.valueOf(content.charAt(i)), position[i][0],position[i][1], paint);  
  70.             }  
  71.         }  
  72.     }  
  73.   
  74.   
  75.     public void getPositions(String content) {  
  76.         this.content = content;  
  77.         char ch;  
  78.         //输入点的 x的坐标  
  79.         int x = 0;  
  80.         //当前行数  
  81.         int lineNum = 1;  
  82.         count = content.length();  
  83.         //初始化字体位置数组  
  84.         position=new int[count][2];  
  85.         for (int i = 0; i < count; i++) {  
  86.             ch =content.charAt(i);  
  87.             String str = String.valueOf(ch);  
  88.   
  89.             //根据画笔获得每一个字符的显示的rect 就是包围框(获得字符宽度)  
  90.             Rect rect = new Rect();  
  91.             paint.getTextBounds(str, 01, rect);  
  92.             int strwidth = rect.width();  
  93.             //对有些标点做些处理  
  94.             if (str.equals("《") || str.equals("(")) {  
  95.                 strwidth += xPaddingMin * 2;  
  96.             }  
  97.             //当前行的宽度  
  98.             float textWith = strwidth;  
  99.             //没画字前预判看是否会出界  
  100.             x += textWith;  
  101.             //出界就换行  
  102.             if (x > width) {  
  103.                 lineNum++;// 真实的行数加一  
  104.                 x = 0;  
  105.             } else {  
  106.                 //回到预判前的位置  
  107.                 x -= textWith;  
  108.             }  
  109.             //记录每一个字的位置  
  110.             position[i][0]=x;  
  111.             position[i][1]=textHeight * lineNum + yPadding * (lineNum - 1);  
  112.             //判断是否是数字还是字母 (数字和字母应该紧凑点)  
  113.             //每次输入完毕 进入下一个输入位置准备就绪  
  114.             if (isNumOrLetters(str)) {  
  115.                 x += textWith + xPaddingMin;  
  116.             } else {  
  117.                 x += textWith + xPadding;  
  118.             }  
  119.         }  
  120.         //根据所画的内容设置控件的高度  
  121.         this.setHeight((textHeight +yPadding) * lineNum);  
  122.     }  
  123.   
  124.   
  125.   
  126.     //工具类:判断是否是字母或者数字  
  127.     public boolean isNumOrLetters(String str)  
  128.     {  
  129.         String regEx="^[A-Za-z0-9_]+$";  
  130.         Pattern p=Pattern.compile(regEx);  
  131.         Matcher m=p.matcher(str);  
  132.         return m.matches();  
  133.     }  
  134.      // 工具类:在代码中使用dp的方法(因为代码中直接用数字表示的是像素)  
  135.     public static int dip2px(Context context, float dip) {  
  136.         final float scale = context.getResources().getDisplayMetrics().density;  
  137.         return (int) (dip * scale + 0.5f);  
  138.     }  
  139. }  


 
xml使用如下 

[html] view plaincopy设置TextView的行间距设置TextView的行间距
  1. <当前包名.MyTextView  
  2.                  android:layout_width="match_parent"  
  3.                  android:layout_height="wrap_content"  
  4.                  android:id="@+id/video_dec"  
  5.                 />  
效果如下

设置TextView的行间距