EditText.setSelection(end)没有效果?

15
我使用以下代码将光标设置在自定义的EditText结尾,但它没有任何效果。

我使用以下代码将光标设置在自定义的EditText结尾,但它没有任何效果。

customEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                 if (hasFocus) {
                    String customEditTextText = customEditText.getText().toString();
                    int selection = customEditTextText.length();
                    customEditText.setSelection(selection);
                }
            }
});

有人对此有任何想法吗?


尝试使用以下代码:customEditText.setSelection(customEditText.getText().length()); - Lal
1
无需将其转换为字符串。 - Lal
你试过了吗,@Jacob? - Lal
android.widget.EditText.getText() 返回 Editable。 - Jacob
7个回答

14

我在AlertDialog中使用EditText时也遇到了同样的问题。对我而言,解决方法如下:

    mEditText.post(new Runnable() {
        @Override
        public void run() {
            mEditText.setSelection(mEditText.length());
        }
    });

11

对我来说没问题:

editText.requestFocus();
editText.setSelection(editText.getText().length());

1
绝对精彩! - Faizan Haidar Khan
2
这应该是被接受的答案。同时,这也是正确的做法。 - Abhinav Upadhyay
我不明白这个,他的EditText已经有焦点了。 - hmac

9

这对我起作用

mEditText.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mEditText.setSelection(mEditText.getText().length());
                    }
                }, 50);

不知道为什么,但需要使用postDelayed才能使其正常工作。仅使用post并不能正常工作。


以上方法都对我没用。我不得不在MotionEvent的Runnable中使用setSelection方法来使软键盘在打开Fragment时弹出。 - Antroid

2

尝试这个

customEditText.setSelection(customEditText.getText().length());

不需要将其转换为字符串,即可设置选择...

3
尝试这个:customEditText.setSelection(customEditText.length());该代码意为将光标定位到自定义编辑文本的末尾。 - Lal

1
为了设置选择,软键盘应该打开。
if(binding.edtListName.requestFocus()) {
            DataManager.showKeyboard(binding.edtListName,context);

        }

DataManager类:
public static void showKeyboard(EditText editText, Context context){
        editText.requestFocus();
        editText.postDelayed(new Runnable(){
                                 @Override public void run(){
                                     InputMethodManager keyboard=(InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
                                     keyboard.showSoftInput(editText,0);

                                     if (editText.getText().toString().length() > 0 ) {

                                         editText.setSelection(0,editText.getText().toString().length());
                                     }
                                 }
                             }
                ,400);
    }

0

试试这个......

editText.requestFocus();

注意:它会自动将光标设置到EditText的最后位置。


0

试试这个

customEditText.setSelection(customEditText.getText().length()-1);

我相信这不会给他正确的解决方案,但由于它是自定义编辑文本,可能存在其他问题,比如布局。所以这是一种试探性的方法。发布的代码与您评论的代码相同。 - essess
抱歉,我的代码不同,但与问题所要求的相同。当我使用圆角自定义编辑文本时,我也遇到了类似的问题,但奇怪的是光标不可见,但问题是其他方面引起的。由于我无法在问题下评论,所以我必须将其写成答案。 - essess
好的,@essess 让他尝试两个答案吧。我只是问了你而已。如果让你感到不舒服,对不起。 - Lal
他想指向文本的末尾。由于0是文本开头的左侧,text.length指向文本右侧,这就是目标(据我所知)。 - Felipe Centeno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接