如何在EditText中将光标设置在末尾

13
无论何时我触摸EditText,光标都应该在最末尾。即使EditText已经存在一些文本,它也不应该允许向左移动。
注:EditText是安卓操作系统中的一个控件,用于获取用户输入的文本信息。
 editTextView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {

                    editTextView.onTouchEvent(event);

                    if(!textFocus) {
                        editTextView.setSelection(editTextView.getText().length());
                        textFocus = true;
                    }

                    return true;
                }
            });

            editTextView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    textFocus = false;
                }
            });
5个回答

19

这对我很有帮助。每次当我触摸编辑框时,光标就会在末尾。

editTextView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    editTextView.onTouchEvent(event);
                    editTextView.setSelection(editTextView.getText().length());
                    return true;
                }
            });

在更新的版本中,API用户可以使用手柄拖动,但在这种情况下它不起作用。 - Thanvandh

7
你可以扩展EditText并重写onSelectionChanged函数。
例如:
    public class CustomEditText extends EditText {
         public CustomEditText(Context context, AttributeSet attrs) {
             super(context, attrs);
         }

         public CustomEditText(Context context) {
             super(context);
         }

         public CustomEditText(Context context, AttributeSet attrs, int defStyle) {
             super(context, attrs, defStyle);
         }

         @Override 
         protected void onSelectionChanged(int selStart, int selEnd) {
              this.setSelection(this.getText().length());
         }
    }

在XML中,您应该使用yourpackagename.CustomEditText代替EditText。

4

尝试下面的代码片段,应该可以正常工作

a)

   editText.setText("Your text");
   editText.setSelection(editText.getText().length());
b)

   editText.setText("");    
   editText.append("Your text");

c)

   editText.append("");

0

实际上没有直接做到这一点的方法,但是可以这样做:

editText.setText(editText.getText().toString);

在焦点变化或任何你想要的地方。


0
请使用以下代码:
editText.setTextKeepState(CharSequence text)

设置要显示的文本但保留光标位置。


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