21

私は入力(text、text_font_size、device_width)を取るAndroidのメソッドを探しています。これらの計算に基づいて、特定のテキストを表示するのに必要な高さを返します。デバイス幅とフォントサイズに基づいてTextViewの高さを測定する方法は?

コンテンツに基づいてテキストビュー/ webview高さランタイムを設定していますが、ワープコンテンツについて認識していますが、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の高さを返します。 Beanはここにあり、パフォーマンスの最適化では "フォント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」は、フォント15

2のための17の高さを返している)「ジェリービーンの最新バージョンは、パフォーマンスの最適化と、ここにあること」の高さを返します。フォント15の場合は17

これらの値を私のビューに設定してからテキストを切り抜くと、すべてのコンテンツが表示されません。

また、テーブルには幅が大きいものの、電話には表示されないものもあります。

コンテンツに基づいて高さを計算する方法はありますか?

答えて

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()の最初PARAMTERを変更します。

+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を作ることができます。

関連する問題