如何知道TextView与某些字符串的大小

时间:2015-01-16 14:21:20

标签: android textview

也许我没有输入正确的关键字,但我找不到答案。我想知道如果我用一个字符串设置它,TextView的尺寸是多少。但是,在活动中所有内容都已布置之前,我想知道。

我的TextView具有固定的宽度和可变的高度。我可以得到这样的高度:

myTextView.setText(myString);

// ... UI gets laid out ...

myTextView.getHeight()

如果高度超过某个点,我想更改TextView的宽度。 (但不是在那之前。)而不是等到UI布局之后,我想事先知道如果它有myString则高度是多少,然后在需要时改变宽度。

我查看了Layout课程,但我无法弄清楚要做什么。我想知道它是否可能与覆盖TextView的onMeasure有关,但我真的不知道如何尝试。任何帮助表示赞赏。

更新

感谢@ user3249477和@ 0xDEADC0DE的回答。我正在将@ user3249477的答案标记为现在的解决方案(虽然因为我需要多次调整视图的大小,我不确定反复打开和关闭可见性)而且还要+1来@ 0xDEADC0DE以便为我提供我需要的关键字进一步研究这个问题。

我需要对此进行更多的研究和测试。以下是我发现迄今为止有用的一些链接:

OnLayoutChangeListener:

measureText()和getTextBounds():

覆盖父视图的onSizeChanged看起来也很有趣:https://stackoverflow.com/a/14399163/3681880

2 个答案:

答案 0 :(得分:2)

你可以不覆盖地做到这一点。如果TextView PaintgetPaint()一起使用,则measureText(string)可以使用TextView获取Paint的最小值TextView textView = new TextView(this); float textWidth = textView.getPaint().measureText("Some Text"); 1}}。我看起来像这样:

getTextBounds()

<强>更新
要获得高度,您可以在Paint对象上调用 String text = "Some Text"; Rect textBounds = new Rect(); textView.getPaint().getTextBounds(text, 0, text.length(), textBounds); float height = textBounds.height(); float width = textBounds.width(); ,如下所示:

{{1}}

答案 1 :(得分:1)

TextView设置为隐身:

android:visibility="invisible"

并测量它。完成后,将其设置为可见:

TextView myTextView = (TextView) findViewById(R.id.text);
final int maxHeight = 500;
myTextView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
    @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom,
                               int oldLeft, int oldTop, int oldRight, int oldBottom) {
        v.removeOnLayoutChangeListener(this);

        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) v.getLayoutParams();
        Log.e("TAG", "H: " + v.getHeight() + " W: " + v.getWidth());

        if (v.getWidth() > maxHeight) {
            params.width += 100;
            v.setLayoutParams(params);
        }
        v.setVisibility(View.VISIBLE);
    }
});