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) {
       ...
     }
});
Другие вопросы по тегам