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...