2

次のようにEdittextのテキストを変更して、アクティビティのonCreate()メソッドでEdittextのgetLineCount()を実行するにはどうすればよいですか。

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

ビューはまだ描画されていないため、getLineCount()は常に0を返します。この問題を回避する方法はありますか?ありがとう!

4

3 に答える 3

2

これは間違いなく苦痛です。私の場合、編集する必要がなかったので、一緒に作業しましたが、あなたから派生しTextViewたものとして見ると、同じアプローチを使用できるはずです。サブクラス化して実装し、呼び出した新しいリスナーを呼び出しました。リスナーでは、有効な結果で呼び出すことができます。EditTextTextViewTextViewonSizeChangedOnSizeChangedListenergetLineCount()

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 に答える