也许我没有输入正确的关键字,但我找不到答案。我想知道如果我用一个字符串设置它,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
答案 0 :(得分:2)
你可以不覆盖地做到这一点。如果TextView
Paint
与getPaint()
一起使用,则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);
}
});