亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android實現TextView兩端對齊的方法

2020-04-11 11:02:28
字體:
來源:轉載
供稿:網友

Android中的TextView控件默認是做不到兩端對齊的,都是左對齊。可能的原因是安卓默認數字、字母不能為第一行以后每行的開頭字符,因為數字、字母為半角字符,還有就是文字中的英文字符占用1個字節,而一個漢字占用兩個字節。下面我就介紹下實現兩端對齊的原理:

  • 1、測量一個中文漢字所占用的寬度
  • 2、根據TextView的寬度和一個漢字所占用的寬度以及字符之間的間隔計算出總行數。
  • 3、根據padding和margin以及行高計算出TextView的總高度。
  • 4、繪制每一行的每一個字符

效果如下:

具體代碼如下:

package com.wedroid.framework.module.ui;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.text.TextPaint;import android.text.TextUtils;import android.util.AttributeSet;import android.view.ViewGroup.MarginLayoutParams;import android.view.ViewTreeObserver.OnPreDrawListener;import android.widget.TextView;public class WeDroidAlignTextView extends TextView {  private boolean first = true;  public WeDroidAlignTextView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);    getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {      @Override      public boolean onPreDraw() {        initTextInfo();        return true;      }    });  }  public WeDroidAlignTextView(Context context, AttributeSet attrs) {    this(context, attrs, 0);  }  public WeDroidAlignTextView(Context context) {    this(context, null, 0);  }  private float textSize;  private float textLineHeight;  private int top;  private int y;  private int lines;  private int bottom;  private int right;  private int left;  private int lineDrawWords;  private char[] textCharArray;  private float singleWordWidth;  private float lineSpacingExtra;  public void initTextInfo() {    textSize = getTextSize();    textLineHeight = getLineHeight();    left = 0;    right = getRight();    y = getTop();    // 要畫的寬度    int drawTotalWidth = right - left;    String text = getText().toString();    if (!TextUtils.isEmpty(text) && first) {      textCharArray = text.toCharArray();      TextPaint mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);      mTextPaint.density = getResources().getDisplayMetrics().density;      mTextPaint.setTextSize(textSize);      // 一個單詞的的寬度      singleWordWidth = mTextPaint.measureText("一") + lineSpacingExtra;      // 一行可以放多少個字符      lineDrawWords = (int) (drawTotalWidth / singleWordWidth);      int length = textCharArray.length;      lines = length / lineDrawWords;      if ((length % lineDrawWords) > 0) {        lines = lines + 1;      }      first = false;      MarginLayoutParams layoutParams = (MarginLayoutParams) getLayoutParams();      int totalHeight = (int) (lines*textLineHeight+textLineHeight*2 + getPaddingBottom()+getPaddingTop()+layoutParams.bottomMargin+layoutParams.topMargin);      setHeight(totalHeight);    }  }  @Override  protected void onDraw(Canvas canvas) {    bottom = getBottom();    int drawTotalLine = lines;    if(maxLine!=0&&drawTotalLine>maxLine){      drawTotalLine = maxLine;    }    for (int i = 0; i < drawTotalLine; i++) {      try {        int length = textCharArray.length;        int mLeft = left;        // 第i+1行開始的字符index        int startIndex = (i * 1) * lineDrawWords;        // 第i+1行結束的字符index        int endTextIndex = startIndex + lineDrawWords;        if (endTextIndex > length) {          endTextIndex = length;          y += textLineHeight;        } else {          y += textLineHeight;        }        for (; startIndex < endTextIndex; startIndex++) {          char c = textCharArray[startIndex];//         if (c == ' ') {//           c = '/u3000';//         } else if (c < '/177') {//           c = (char) (c + 65248);//         }          canvas.drawText(String.valueOf(c), mLeft, y, getPaint());          mLeft += singleWordWidth;        }      } catch (Exception e) {        e.printStackTrace();      }    }  }  int maxLine;  public void setMaxLines(int max){    this.maxLine = max;  }  public void setLineSpacingExtra(int lineSpacingExtra){    this.lineSpacingExtra = lineSpacingExtra;  }   /**    * 判斷是否為中文    * @return    */   public static boolean containChinese(String string){     boolean flag = false;     for (int i = 0; i < string.length(); i++) {       char c = string.charAt(i);       if ((c >= 0x4e00) && (c <= 0x9FA5)) {         flag = true;       }     }     return flag;   }  public static String ToDBC(String input) {    // 導致TextView異常換行的原因:安卓默認數字、字母不能為第一行以后每行的開頭字符,因為數字、字母為半角字符    // 所以我們只需要將半角字符轉換為全角字符即可    char c[] = input.toCharArray();    for (int i = 0; i < c.length; i++) {      if (c[i] == ' ') {        c[i] = '/u3000';      } else if (c[i] < '/177') {        c[i] = (char) (c[i] + 65248);      }    }    return new String(c);  }}

希望本文所述對大家學習Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
这里只有精品在线播放| 色妞色视频一区二区三区四区| 国产亚洲一区二区精品| 久久综合伊人77777尤物| 国内精品久久久久久影视8| 欧美大秀在线观看| 日本精品一区二区三区在线播放视频| 这里只有精品视频| 国产福利视频一区二区| 亚洲一区中文字幕| 久久99久久亚洲国产| 一区二区三区四区精品| 久久久最新网址| 欧美另类99xxxxx| 亚洲欧美日韩精品久久| 国产精品久久久久久久久免费| 精品呦交小u女在线| 久久亚洲精品毛片| 欧洲精品在线视频| 国产日韩欧美中文| 日韩美女视频在线观看| 国产精品va在线播放我和闺蜜| 久热爱精品视频线路一| 欧美日韩美女在线| 欧美一级片一区| 亚洲电影av在线| 欧美精品18videosex性欧美| 伊人成人开心激情综合网| 国产在线播放不卡| 久久国产精品网站| www.精品av.com| 一本色道久久综合狠狠躁篇的优点| 日韩美女av在线免费观看| 最新日韩中文字幕| 精品国产老师黑色丝袜高跟鞋| 久久成人精品视频| 国产午夜一区二区| 另类少妇人与禽zozz0性伦| 蜜月aⅴ免费一区二区三区| 4388成人网| 国产欧美在线观看| 精品亚洲aⅴ在线观看| 国产日韩精品一区二区| 欧美成人精品h版在线观看| 日韩大陆欧美高清视频区| 91精品国产91久久久久久| 中文字幕久热精品在线视频| 亚洲人成网7777777国产| 久久精品国产v日韩v亚洲| 国产日韩av在线| 国产精品88a∨| 国产精品狼人色视频一区| 亚洲国产日韩欧美在线99| 尤物yw午夜国产精品视频| 成人av色在线观看| 亚洲国产成人久久综合| 欧美日韩中文字幕在线视频| 欧美性猛交xxxx乱大交极品| 国产精品自产拍在线观看| 91精品啪在线观看麻豆免费| 日韩av免费网站| 亚洲精品久久7777777| 97在线免费观看视频| 国产精品免费久久久| 青青在线视频一区二区三区| 91欧美视频网站| 亚洲午夜小视频| 国产成人综合精品| 日韩中文字幕免费视频| 精品成人在线视频| 亚洲www在线观看| 欧美激情免费观看| 性色av香蕉一区二区| 91在线精品播放| 亚洲丝袜一区在线| 怡红院精品视频| 日日噜噜噜夜夜爽亚洲精品| 国模私拍视频一区| 动漫精品一区二区| 夜夜嗨av色综合久久久综合网| 91美女福利视频高清| 国产xxx69麻豆国语对白| 久久天天躁狠狠躁夜夜av| 欧美激情aaaa| 91视频九色网站| 日韩经典第一页| 国产精品福利小视频| 色诱女教师一区二区三区| 国产精品视频专区| 久久久www成人免费精品张筱雨| 欧美黑人性视频| 欧美成人免费全部观看天天性色| 日韩精品视频在线观看网址| 久久视频免费观看| 欧美激情视频给我| 日韩中文字幕不卡视频| 精品国产一区二区三区四区在线观看| 一区二区亚洲精品国产| 日韩在线观看免费全集电视剧网站| 日产日韩在线亚洲欧美| 国产精品99久久久久久白浆小说| 精品国产成人在线| 少妇精69xxtheporn| 亚洲精品综合精品自拍| 欧美成人在线免费| 欧美激情乱人伦一区| 成人中文字幕+乱码+中文字幕| 91久久国产精品| 亚洲jizzjizz日本少妇| 一本色道久久综合亚洲精品小说| 日韩在线播放视频| 欧美视频专区一二在线观看| 欧美国产日韩二区| 日韩av色综合| 欧美巨乳在线观看| 美女视频久久黄| 欧美日韩裸体免费视频| 538国产精品一区二区免费视频| 国产不卡精品视男人的天堂| 国产精品毛片a∨一区二区三区|国| 久久久久久久久久国产| 国产免费一区二区三区在线能观看| 疯狂做受xxxx欧美肥白少妇| 亚洲精品久久久久中文字幕欢迎你| 久久久久久久久久久久久久久久久久av| 亚洲一级片在线看| 亚洲女人被黑人巨大进入al| 狠狠躁夜夜躁人人躁婷婷91| 国产精品久久久久久一区二区| 欧美精品久久久久久久| 亚洲电影免费观看高清完整版在线观看| 视频在线一区二区| 国产精品视频久久| 26uuu国产精品视频| 九九九久久久久久| 国产精品91视频| 欧美日韩在线视频观看| 欧美电影免费观看高清完整| 精品视频在线播放色网色视频| 欧美性猛交xxxx乱大交| 精品久久久久久久久中文字幕| 久久久免费精品视频| 日韩在线免费高清视频| 日韩成人在线电影网| 91精品国产自产91精品| 色偷偷偷综合中文字幕;dd| 97超级碰在线看视频免费在线看| 欧美视频在线观看免费| 久久亚洲精品一区二区| 国产欧美精品一区二区| 欧美激情va永久在线播放| 尤物九九久久国产精品的分类| 在线成人免费网站| 日韩精品极品在线观看播放免费视频| 中文字幕在线视频日韩| 色一情一乱一区二区| 懂色av一区二区三区| 国产精品香蕉在线观看| 91性高湖久久久久久久久_久久99| 欧美日韩综合视频| 亚洲美女在线视频| 日本久久久a级免费| 色婷婷综合久久久久| 国产日韩欧美在线观看|