Android中測量Text的寬度和高度

2021-08-15 04:04:34 字數 1763 閱讀 5201

android中,在自定義view中通過canvas繪製文字時,經常需要測量文字的寬度和高度。這裡記錄下幾種比較常用的方法,僅作備忘。

paint paint = new paint();

paint.settextsize(size);

float strwidth = paint.measuretext(str);

paint paint = new paint();

rect rect = new rect();

paint.gettextbounds(str, 0, str.length(), rect);

int w = rect.width();

int h = rect.height();

float width = 0;

int len = str.length();

paint paint = new paint();

float widths = new

float[len];

paint.gettextwidths(str, widths);

for (int i = 0; i < len; i++)

paint paint = new paint();

paint.settextsize(size);//設定字型大小

paint.settypeface(typeface.xx);//設定字型

fontmetrics fontmetrics = getfontmetrics();

float height1 = fontmetrics.descent - fontmetrics.ascent

;float height2 = fontmetrics.bottom - fontmetrics.top

;

這裡獲取的兩個高度略有不同,height2的高度會略大於height1,這樣在文字的頂部和底部就會有一些留白。具體使用哪個高度,要看具體需求了。

此外,還可以通過paint.getfontspacing和paint.getfontmetrics(null)來獲得高度,其實前者也是呼叫後者來實現的。這裡的值和通過fontmetrics.descent - fontmetrics.ascent獲得的大小是一致的。

textpaint textpaint = new textpaint();

paint.settextsize(size);//設定字型大小

paint.settypeface(typeface.xx);//設定字型

float width = layout.getdesiredwidth(str,textpaint);

之前碰到乙個問題,textview在布局上占用的高度和屬性textsize的大小不一樣,要比textsize的值大一些(比如textsize=」12dp」,實際的高度大概有14-16dp),仔細看的話會發現文字的上方和下發留有空白。查了下文件,發現可以通過設定android:includefontpadding來控制是否包含上下空白。

int baseline = (targetrect.bottom + targetrect.top - fontmetrics.bottom - fontmetrics.top) / 2

; 或者

int baseline = targetrect.centery - top/2 - bottom/2.

Android中View的測量

即精確值模式,當我們將空間的width或height制定為具體值 或者為match parent時,此時將佔據父容器的大小,使用的就是exactly。最大值模式,當空間的寬高屬性制動為自適應wrap content時,控制項大小一般隨著空間的子空間或內容的變化而發生改變,此時view的尺寸只要不超過...

android中html和text互轉

html轉textmedittext edittext findviewbyid r.id et medittext.settext html.fromhtml content mtv one textview findviewbyid r.id tv one mtv one.settext htm...

Android 常見的幾種元件獲取text方法。

常見的幾種元件獲取text方法。首先給各元件設定唯一的標識id,然後在oncreate方法中獲取元件物件,再通過對應方法獲取元件的text。注 為方便理解,這裡我所有的元件的id都設為name 1 獲取textview元件的text 根據id獲取textview物件 textview textvie...