2

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

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

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

4

3 回答 3

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);
        }
    }
}
于 2011-11-14T23:08:41.510 回答
2

呃,到处都是 UI 的问题。

您可以使用处理程序。您将发布一个 Runnable,它将获取行数并继续处理。

于 2011-11-10T21:17:07.283 回答
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) {
       ...
     }
});
于 2012-02-24T15:34:10.043 回答