Android TextView 設定字間距和行間距,androidtextview

來源:互聯網
上載者:User

Android TextView 設定字間距和行間距,androidtextview

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);    }    @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);    }}


xml使用如下

 <當前包名.MyTextView                  android:layout_width="match_parent"                  android:layout_height="wrap_content"                  android:id="@+id/video_dec"                 />
效果如下




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.