【Android】Font Basic

來源:互聯網
上載者:User

標籤:

Font

文字最終的大小是和繪製文字的字型的類型和字型的大小是相關的.

設定字型類型 Paint.setTypeface(Typeface typeface)

設定字型大小 Paint.setTextSize(float textSize)

幾個相關的尺寸和方法 Paint.FontMetrics

有5個屬性,並且這5個屬性都是跟字型相關的.

top: 字型中字元超出基準之上的最大距離bottom: 字型中字元超出基準之下的最大距離ascent: 單個字元超出基準之上的推薦距離descent: 單個字元超出基準之上的推薦距離leading: 標準行間距
Paint.getTextBounds

這個方法擷取字元[字串]佔據的矩形地區,意為字型可見部分的矩形地區

Rect bound = new Rect();mPaint.getTextBounds(text, 0, text.length(), bound);bound.right - bound.left //得到的就是字元[字串]的可見部分矩形地區的寬度
mPaint.measureText(text)

返回的是字元[字串]的寬度,注意與

bound.right - bound.left

相互區分.

因為通常來說每個字元兩邊都會留有一部分空白地區,便於閱讀.所以measureText的尺寸通常會大於bound.right - bound.left.所以,對於單個字元來說:

measureText = bound.right - bound.left + 字元兩邊的留白寬度
整體圖示如下

應用情境
  1. 垂直置中的文字,計算基準位置使用FontMetrics比較方便.

  2. 或者大小不一的問題要實現對齊,使用getTextBounds比較方便.

  3. 擷取文字的理想寬度,使用measureText比較方便

圖示代碼
Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);Rect bound = new Rect();@Overridepublic void onDraw(Canvas canvas) {    super.onDraw(canvas);    mPaint.setTextSize(600);    String text = "p";    draw1(canvas, text, 800);}private void draw1(Canvas canvas, String text, float baseLineY) {    mPaint.getTextBounds(text, 0, text.length(), bound);    mPaint.setColor(Color.rgb(0xb4, 0xb4, 0xb4));    canvas.drawRect(bound.left, bound.top + baseLineY, bound.right, bound.bottom + baseLineY, mPaint);    float width = mPaint.measureText(text);    mPaint.setColor(Color.rgb(0x00, 0x00, 0x00));    canvas.drawRect(bound.left, bound.top + baseLineY - 30, bound.left + width, bound.top + baseLineY - 20, mPaint);    Paint.FontMetrics fontMetrics = mPaint.getFontMetrics();    mPaint.setColor(Color.BLACK);    canvas.drawText(text, 0, baseLineY, mPaint);    canvas.drawLine(0, baseLineY, getWidth(), baseLineY, mPaint);    mPaint.setColor(Color.RED);    canvas.drawLine(0, baseLineY + fontMetrics.top, getWidth(), baseLineY + fontMetrics.top, mPaint);    canvas.drawLine(0, baseLineY + fontMetrics.bottom, getWidth(), baseLineY + fontMetrics.bottom, mPaint);    mPaint.setColor(Color.BLUE);    canvas.drawLine(0, baseLineY + fontMetrics.ascent, getWidth(), baseLineY + fontMetrics.ascent, mPaint);    canvas.drawLine(0, baseLineY + fontMetrics.descent, getWidth(), baseLineY + fontMetrics.descent, mPaint);}
Android分享 Q群:315658668

【Android】Font Basic

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.