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);
使它起作用,但这是不好的做法。
有什么更好的选择? OnClickListener
和 OnTouchListener
(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()
。
通常情况下,单击视图时,文本光标会设置在您单击的位置附近。
我尝试将它始终设置为结尾(超过最后一个字符),但除非动作被延迟,否则它什么都不做。
以下:
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);
使它起作用,但这是不好的做法。
有什么更好的选择? OnClickListener
和 OnTouchListener
(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()
。