Android TextView 设置字间距和行间距

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

android:lineSpacingMultiplier="1.8"2.如果您是要设置字间距需要自定义控件<pre name="code" class="java">import android.content.Context;import android.graphics.*;import android.text.TextUtils;import android.util.AttributeSet;import android.widget.TextView;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * Created by mrni-mac on 14-11-25. */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);}@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 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);}}xml使用如下 <当前包名.MyTextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/video_dec"/>效果如下

,有希望在的地方,痛苦也成欢乐

Android TextView 设置字间距和行间距

相关文章:

你感兴趣的文章:

标签云: