【问题标题】:How to TextView height actually measure?如何实际测量 TextView 的高度?
【发布时间】:2016-09-17 15:09:14
【问题描述】:

我想了解 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

【问题讨论】:

  • 如果你真的想知道看TextView#onMeasure方法,但你实际上需要它做什么?
  • @pskink 我正在测量文本的顶部和底部填充。因此,如果我在 LinearLayout 中放置两个 textView 或一个 textView 和一个 ImageView,它们之间的空间应该看起来相同。
  • 参见TextView#setIncludeFontPadding,但为什么不使用一个TextView 而不是在LinearLayout 中合并两个或多个?
  • @pskink setIncludeFontPadding 没有价值,或者我可以说它对某些字体的效果更差。我必须支持所有系统字体。两个TextView 只是一个例子。它可以是任何数字。
  • 使用this布局并注意正确的文本:它看起来像一个TextView,但实际上它们是三个TextViews合一LinearLayout

标签: android textview


【解决方案1】:

当视图被渲染时,窗口会计算它的位置和高度,即使你再添加一行,它也会保持 58。行高对应于绘制文本的高度,而 textviews 高度对应于渲染视图的高度。玩它:尝试在 dp 中应用 textview 的高度,例如 30,然后包装内容并匹配父级并查看 logcat。让我知道它是否有效

【讨论】:

  • 我得到以下 TextSize 32 的结果。09-17 13:12:12.611 25729-25729/?: getHeight() 调用:text = [Me], textSize = [32], deviceWidth = [1562] 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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 2015-08-15
相关资源
最近更新 更多