21

我正在尋找Android中的方法,它將採用輸入(text,text_font_size,device_width)並基於這些計算它將返回顯示特定文本所需的高度。如何根據設備寬度和字體大小測量TextView高度?

我設置了一個基於他的內容的文本視圖/ webview高度運行時,我知道關於warp內容,但我不能在我的情況下使用,因爲一些web視圖最小高度問題。

所以我想要計算高度和基於我設置視圖高度。

我曾嘗試用以下方式

Paint paint = new Paint(); 
paint.setTextSize(text.length()); 
Rect bounds = new Rect(); 
paint.getTextBounds(text, 0, 1, bounds); 
mTextViewHeight= bounds.height(); 

所以輸出

1)的 「Hello World」 的字體15

2返回13的高度)「最新版本果凍豆是在這裏,與性能優化「返回字體15的高度16

然後我已經嘗試與

Paint paint = new Paint(); 
paint.setTextSize(15); 
paint.setTypeface(Typeface.SANS_SERIF); 
paint.setColor(Color.BLACK); 

Rect bounds = new Rect(); 
paint.getTextBounds(text, 0, text.length(), result); 

Paint.FontMetrics metrics = brush.getFontMetrics(); 
int totalHeight = (int) (metrics.descent - metrics.ascent + metrics.leading); 

所以輸出

1)的「Hello World」返回17的高度爲字體15

2)「果凍豆的最新版本是在這裏,具有性能最佳化」返回的高度17字體15

如果我將這些值設置爲我的視圖,那麼它剪切一些文本,它不會顯示所有內容。

同樣,它在某些桌子上看起來不錯,因爲它有很大的寬度,但不是在手機上。

有什麼方法根據內容計算高度?

回答

44
public static int getHeight(Context context, String text, int textSize, int deviceWidth) { 
    TextView textView = new TextView(context); 
    textView.setText(text); 
    textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); 
    int widthMeasureSpec = MeasureSpec.makeMeasureSpec(deviceWidth, MeasureSpec.AT_MOST); 
    int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); 
    textView.measure(widthMeasureSpec, heightMeasureSpec); 
    return textView.getMeasuredHeight(); 
} 

如果textSize沒有在像素爲單位的,改變的setTextSize()第一個參數中。

+0

真棒回答。 – Noundla

+0

什麼是文字大小基本上? –

7

Paint.getTextBounds()不會返回您所期望的。詳情是here

相反,你可以試試這個方法:

int mMeasuredHeight = (new StaticLayout(mMeasuredText, mPaint, targetWidth, Alignment.ALIGN_NORMAL, 1.0f, 0.0f, true)).getHeight(); 
+0

謝謝。這是繪製文本時應該用來重新組合原生TextView高度的東西。 –

+0

自定義字體呢? –

5

我有一個更簡單的方法知道前行畫的真正高度,我不知道這是否幫助你們,但我的解決方案取得一行是獨立佈局的高度的高度,只是採取的字體規格是這樣的:

myTextView.getPaint().getFontMetrics().bottom - myTextView.getPaint().getFontMetrics().top) 

與我們得到真正的高度的字體會從TextView的是繪。這不會給你一個int,但你可以讓Math.round得到一個接近的值。

相關問題