EditText 的 onFocusChange 中的 setSelection

setSelection in EditText's onFocusChange

通常情况下,单击视图时,文本光标会设置在您单击的位置附近。
我尝试将它始终设置为结尾(超过最后一个字符),但除非动作被延迟,否则它什么都不做。
以下:

new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus) {
            EditText et = (EditText) v;
            et.setSelection(et.getText().length());
        }
    }
});

不起作用。延迟 setSelection 部分:

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        et.setSelection(et.getText().length());
    }
}, 40);

使它起作用,但这是不好的做法。

有什么更好的选择? OnClickListenerOnTouchListener(ACTION_DOWN 和 ACTION_UP 两者)也没有帮助。

不需要延迟。我们需要等待 setSelection 否则自动调用完成并执行我的 setSelection.

new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus) {
            final EditText et = (EditText) v;
            et.post(new Runnable() {
                @Override
                public void run() {
                    et.setSelection(et.getText().length());
                }
            });
        }
    }
});

您应该在 addTextChangedListener()afterTextChanged() 中调用 setSelection()