如何在活动的onCreate()方法中执行Edittext的getLineCount(),更改了Edittext的文本,如下所示:
@override
public void onCreate(Bundle savedInstanceState){
myEditText.setText("EXAMPLE");
myEditText.getLineCount();
}
因为尚未绘制视图,getLineCount()将始终返回0.有没有办法解决这个问题?谢谢!
答案 0 :(得分:2)
呃,到处都是UI的问题。
您可以使用处理程序。你将发布一个Runnable来获取行数并继续处理。
答案 1 :(得分:2)
这绝对是一种痛苦。在我的情况下,我不需要编辑,因此我与TextView
合作,但看到EditText
来自TextView
,您应该能够使用相同的方法。我将TextView
子类化并实现onSizeChanged
来调用我称为OnSizeChangedListener
的新侦听器。在听众中,您可以使用有效结果调用getLineCount()
。
TextView
:
/** Size change listening TextView. */
public class SizeChangeNotifyingTextView extends TextView {
/** Listener. */
private OnSizeChangeListener m_listener;
/**
* Creates a new Layout-notifying TextView.
* @param context Context.
* @param attrs Attributes.
*/
public SizeChangeNotifyingTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* Adds a size change listener.
* @param listener Listener.
*/
public void setOnSizeChangedListener(OnSizeChangeListener listener) {
m_listener = listener;
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (m_listener != null) {
m_listener.onSizeChanged(w, h, oldw, oldh);
}
}
}
答案 2 :(得分:1)
非常感谢最后的答案,这对我很有帮助!
作为贡献,我想添加将注册到SizeChangeNotifyingTextView的钩子的侦听器接口的代码(可以在SizeChangeNotifyingTextView类中添加):
public interface OnSizeChangeListener {
public void onSizeChanged(int w, int h, int oldw, int oldh);
}
最后,要注册一个监听器,你可以这样做:
tv.setOnSizeChangedListener(new SizeChangeNotifyingTextView.OnSizeChangeListener() {
@Override
public void onSizeChanged(int w, int h, int oldw, int oldh) {
...
}
});