如何测量基于设备宽度和字体大小TextView的高度?(How to Measure TextVie

2019-07-18 02:35发布

我要寻找一个在Android的方法,将采取一个输入(文本,text_font_size,DEVICE_WIDTH),并根据这些计算将返回多少高度将需要显示特定的文字?

我设置基于他的内容文本视图/ web视图高度运行时,我知道关于经的内容,但我不能在我的情况下使用,因为一些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”返回13的高度为字体15

2)“果冻豆的最新版本是在这里,与性能优化”返回高度16字体15

然后我试图与

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

如果我设置这些值,以我的看法则其切割一些文本,它没有显示的所有内容。

再次,它看起来对一些表作为它具有大的宽度,但不是电话OK。

有没有什么方法来计算基于内容的高度?

Answer 1:

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()



Answer 2:

Paint.getTextBounds()返回不是你所期待的。 详情点击这里 。

相反,你可以试试这个方法:

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


Answer 3:

我有一个更简单的方法知道前行画的真正高度,我不知道这是否帮助你们,但我的解决方案取得一行是独立布局的高度的高度,只是取的字体规格是这样的:

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

与我们得到的被涂的字体会从TextView的实际高度。 这不会给你一个int,但你可以做一个Math.round获得接近值。



文章来源: How to Measure TextView Height Based on Device Width and Font Size?