Android Edittext:在Activity的onCreate()中获取LineCount

时间:2011-11-10 21:09:05

标签: android android-edittext oncreate settext line-count

如何在活动的onCreate()方法中执行Edittext的getLineCount(),更改了Edittext的文本,如下所示:

    @override
    public void onCreate(Bundle savedInstanceState){
        myEditText.setText("EXAMPLE");
        myEditText.getLineCount();
    }

因为尚未绘制视图,getLineCount()将始终返回0.有没有办法解决这个问题?谢谢!

3 个答案:

答案 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) {
       ...
     }
});