I am looking for method in Android that will take a input (text, text_font_size, device_width) and based on these calculations it will return how much height will required to display particular text ?
I am setting a text view/ webview height runtime based on his content,I am aware about warp content but I can't use in my case because of some web view minimum height issue.
So I am trying to calculate height and based on that I am setting view height.
I have tried with following ways
Paint paint = new Paint();
paint.setTextSize(text.length());
Rect bounds = new Rect();
paint.getTextBounds(text, 0, 1, bounds);
mTextViewHeight= bounds.height();
So output is
1) "Hello World" returns a height of 13 for font 15
2) "The latest version of Jelly Bean is here, with performance optimizations" returns a height 16 for font 15
Then I have tried with
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);
So output is
1) "Hello World" returns a height of 17 for font 15
2) "The latest version of Jelly Bean is here, with performance optimisations" returns a height of 17 for font 15
if I set these values to my view then its cutting some text, its not showing all content.
Again it looks OK on some tables as its having big width but not on phone.
Is there any way to calculate height based on content ?
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();
}
If textSize
is not given in pixels, change the first paramter of setTextSize()
.