Android:myTextView.getLineCount()/getHeight()=0?
我想通过编程获得文本视图的高度或至少行数,但日志显示为0。怎么了?这是我的密码:Android:myTextView.getLineCount()/getHeight()=0?,android,textview,getline,Android,Textview,Getline,我想通过编程获得文本视图的高度或至少行数,但日志显示为0。怎么了?这是我的密码: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_off); titreOff = (TextView) findViewById(R.id.offTitre); titreOff.setText
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());
}
感谢您在onCreate()
中的建议,您的TextView
没有布局通行证,因此当前宽度和高度为零。如果您想获取文本视图的维度,有几种解决方案:
将OnGlobalLayoutListener
添加到TextView
的ViewTreeObserver
。(例如,titreOff.getViewTreeObserver().addOnGlobalLayoutListener(listener)
并在那里处理您的更改)
覆盖TextView
并通过覆盖onLayout()
来处理您的特殊情况(在这种情况下,TextView
的尺寸将作为参数
或者,您的测量的最终目标是什么?如果您能给出一些细节,可能有比这更简单的解决方案。在onCreate()中
,您的TextView
没有布局通行证,因此当前的宽度和高度为零。如果您想获得TextView的尺寸,有几种解决方案:
将OnGlobalLayoutListener
添加到TextView
的ViewTreeObserver
(例如titreOff.getViewTreeObserver().addOnGlobalLayoutListener(listener)
并在那里处理更改)
覆盖TextView
并通过覆盖onLayout()
来处理您的特殊情况(在这种情况下,TextView
的尺寸将作为参数
或者,您的测量的最终目标是什么?如果您能给出一些细节,可能会有比这更简单的解决方案。您的应用程序在执行onCreate()
方法时不知道TextView
的实际大小。解决方案是将输出移到此处:
onWindowFocusChanged(boolean hasFocus) {
if (!hasFocus) {
titreOff = (TextView) findViewById(R.id.offTitre);
System.out.println(titreOff.getLineCount() +
" and " + titreOff.getHeight());
}
}
在执行onCreate()
方法时,您的应用程序不知道TextView
的实际大小。解决方案是将输出移动到此处:
onWindowFocusChanged(boolean hasFocus) {
if (!hasFocus) {
titreOff = (TextView) findViewById(R.id.offTitre);
System.out.println(titreOff.getLineCount() +
" and " + titreOff.getHeight());
}
}
setText()
不会立即更新TextView
,它只是使其无效。新文本将仅在下次重新绘制时设置。如果您尝试在获取旧文本之前获取高度
相反,您应该子类化TextView
,重写,并且每次更改TextView
的大小时都会收到通知。setText()
不会立即更新文本视图
,它只是使其无效。新文本将仅在下次重新绘制时设置。如果您尝试在获取旧文本之前获取高度
相反,您应该子类化TextView
,重写,每次更改TextView
的大小时,您都会收到通知。作为警告,不要犯我的错误,在侦听器中进行布局更改--这将导致它无限次地重新进入侦听器。如果确实需要在侦听器中进行布局更改,您应该删除自身中的侦听器(即titreOff.getViewTreeObserver().RemoveGlobalOnlyOutliner(此)
方法中的onGlobalLayout()
。选项#1工作不可靠(尽管视图包含文本,getLineCount在onGlobalLayout中返回0是很常见的)。您可能需要使用选项#2。作为警告,请不要犯我的错误并在侦听器中进行布局更改--这将导致侦听器无限次地重新进入侦听器。如果确实需要在侦听器中进行布局更改,则应删除侦听器本身(即titreOff.getViewTreeObserver().RemoveGlobalOnlyOutliner(this)
在onGlobalLayout()
方法中。选项#1工作不可靠(尽管视图包含文本,getLineCount在onGlobalLayout中返回0是很常见的)。您可能需要使用选项#2。我了解您试图执行的操作,但当我执行此操作时,它仅在我退出视图时返回正确的值,而不是在我输入视图时返回正确的值…我了解您试图执行的操作,但当我执行此操作时,它仅在我退出视图时返回正确的值,而不是在我输入视图时返回正确的值…可能重复Possi不可复制的