Android Edittext: получить LineCount в onCreate() деятельности
Как я могу сделать getLineCount() Edittext в методе onCreate() действия, изменив текст Edittext, как показано ниже:
@override
public void onCreate(Bundle savedInstanceState){
myEditText.setText("EXAMPLE");
myEditText.getLineCount();
}
Поскольку представление еще не было нарисовано, getLineCount() всегда будет возвращать 0. Есть ли способ обойти эту проблему? Спасибо!
3 ответа
Это определенно боль. В моем случае мне не нужно было редактировать, поэтому я работал с 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);
}
}
}
Тьфу, это проблема с интерфейсом везде.
Вы можете использовать обработчик. Вы опубликуете Runnable, который получит количество строк и продолжит обработку.
Большое спасибо за последний ответ, он мне очень помог!
В качестве вклада я хотел бы добавить код интерфейса слушателя, который будет зарегистрирован в хуке 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) {
...
}
});