2016-09-17 77 views
1

我想了解textView最終高度的計算方式。如何TextView高度實際測量?

我嘗試以下的TextView中的測量高度的方法。

public static int getHeight(Context context, String text, int textSize, int deviceWidth) { 
     EmojiTextView textView = new EmojiTextView(context); 
     textView.setText(text); 
     textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize); 
     int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(deviceWidth, View.MeasureSpec.AT_MOST); 
     int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
     textView.measure(widthMeasureSpec, heightMeasureSpec); 
     float lineSpacingMulti = textView.getLineSpacingMultiplier(); 
     float lineSpacingExtra = textView.getLineSpacingExtra(); 
     float lineHeight = textView.getLineHeight(); 
     Log.d(TAG, "getHeight: lineSpacingMulti" + lineSpacingMulti + ":lineSpacingExtra:" + lineSpacingExtra + ":lineHeight:" + lineHeight); 
     return textView.getMeasuredHeight(); 
    } 

我得到了下面的logcat結果:

09-17 12:11:18.974 25729-25729/?: getHeight: lineSpacingMulti1.0:lineSpacingExtra:0.0:lineHeight:43.0 

09-17 12:11:18.973 25729-25729/?: calculateDynamicTextSize: ME Height 58 

所以如果線高度爲43行間距乘數爲1比爲什麼身高測量文本是58

+0

,如果你真的想知道看到'TextView的#onMeasure'方法,但是你需要什麼它實際上是? – pskink

+0

@pskink我正在測量文本的頂部和底部填充。所以如果我在LinearLayout中放置兩個textView或者一個textView和一個ImageView,它們之間的空間應該看起來相同。 – Kaushlendra

+0

請參閱'TextView#setIncludeFontPadding',但爲什麼不使用一個'TextView'而不是在'LinearLayout'中合併兩個或更多? – pskink

回答

0

當View是呈現窗口計算其位置和高度將保持58即使你添加更多的行.line區段高度相當於繪文字的高度,同時textviews高度相當於renderd視圖的高度。使用它:試着應用30像DP的textview的高度,然後在包裝內容和父母匹配,看到logcat。讓我知道,如果它

+0

我得到了TextSize 32的以下結果: 09-17 13:12:12.611 25729-25729/?: getHeight()以下面的方式調用:text = [Me],textSize = [32],deviceWidth = 09 -17 13:12:12.613 25729-25729/?: getHeight:lineSpacingMulti1.0:lineSpacingExtra:0.0:lineHeight:99.0:Line Bounds:Rect(0,0 - 118,132) 09-17 13:12:12.614 25729 -25729/?: calculateDynamicTextSize:ME高度132 – Kaushlendra