我想以编程方式获取文本视图的高度或至少行数,但日志显示为0.错误是什么?这是我的代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_off);
titreOff = (TextView) findViewById(R.id.offTitre);
titreOff.setText("some text"); // displays 2 lines of text with the font size I used
System.out.println(titreOff.getLineCount() + " and " + titreOff.getHeight());
}
感谢您的建议
答案 0 :(得分:3)
在onCreate()
中,您的TextView
没有布局通行证,因此目前的宽度和高度为零。如果您想获得TextView
:
向OnGlobalLayoutListener
的{{1}}添加TextView
。 (例如ViewTreeObserver
并在那里处理您的更改。)
覆盖titreOff.getViewTreeObserver().addOnGlobalLayoutListener(listener)
并通过覆盖TextView
(您将onLayout()
的尺寸作为参数来处理您的特殊情况。
或者,您的测量的最终目标是什么?如果你能给出一些细节,可能会有比这更简单的解决方案。
答案 1 :(得分:2)
您的应用在执行TextView
方法时不知道onCreate()
的实际大小。解决方案是在此处移动输出:
onWindowFocusChanged(boolean hasFocus) {
if (!hasFocus) {
titreOff = (TextView) findViewById(R.id.offTitre);
System.out.println(titreOff.getLineCount() +
" and " + titreOff.getHeight());
}
}
答案 2 :(得分:1)
setText()
不会立即更新TextView
,它会使其无效。新文本将仅在下次重绘时设置。如果你在获得旧高度之前试图获得高度。
相反,您应该创建TextView
的子类,覆盖onSizeChanged()
,每当TextView
的大小发生变化时,您都会收到通知。