将光标置于EditText中的文本末尾

我正在改变keyListener上的EditText的值。

但是当我改变文本时,光标正在移动到EditText的开头。 我需要将光标放在文本的末尾。

如何将光标移动到EditText文本的末尾。

尝试这个:

 EditText et = (EditText)findViewById(R.id.inbox); et.setSelection(et.getText().length()); 

有一个函数叫做append for ediitext,它将string值附加到当前的edittext值并将光标放在值的末尾。 您可以将string值作为当前的ediitext值,并调用append();

 myedittext.append("current_this_edittext_string"); 

如果之前调用了setText ,并且新文本没有通过View.post(Runnable)激发的单独可运行(从此主题View.post(Runnable)获取布局阶段调用setSelection

所以,对我来说这个代码工作:

 editText.setText("text"); editText.post(new Runnable() { @Override public void run() { registerPhone.setSelection("text".length()); } }); 

您也可以将光标置于EditText视图中文本的末尾,如下所示:

 EditText et = (EditText)findViewById(R.id.textview); int textLength = et.getText().length(); et.setSelection(textLength, textLength); 
 editText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { editText.setSelection(editText.getText().length()); return false; } }); 

这是另一个可能的解决scheme

 et.append(""); 

只要尝试这个解决scheme,如果它不工作的原因:

 et.setSelection(et.getText().length()); 

下面的代码是将光标设置到起始位置:

  EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setSelection(0); 

下面的代码是将光标设置到EditText的末尾:

 EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setSelection(editText.getText().length()); 

下面的代码是将光标放在第二个字符之后:

 EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setSelection(2); 

我认为这可以达到你想要的。

  Editable etext = mSubjectTextEditor.getText(); Selection.setSelection(etext, etext.length()); 

你应该可以通过EditText的方法setSelection()来实现,见这里

 /** * Set cursor to end of text in edittext when user clicks Next on Keyboard. */ View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean b) { if (b) { ((EditText) view).setSelection(((EditText) view).getText().length()); } } }; mEditFirstName.setOnFocusChangeListener(onFocusChangeListener); mEditLastName.setOnFocusChangeListener(onFocusChangeListener); 

这对我有好处!

如果你的EditText不清楚:

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

我testing过的所有其他代码都不起作用,因为用户仍然可以将字符/光标放在string中间的任何位置(例如:12 | 3.00 – 其中|是光标)。 我的解决scheme总是把光标放在string的末尾,每当触摸发生在EditText上。

最终的解决scheme是:

 // For a EditText like: <EditText android:id="@+id/EditTextAmount" android:layout_height="wrap_content" android:layout_width="fill_parent" android:hint="@string/amount" android:layout_weight="1" android:text="@string/zero_value" android:inputType="text|numberDecimal" android:maxLength="13"/> 

@ string / amount =“0.00”@ string / zero_value =“0.00”

 // Create a Static boolean flag private static boolean returnNext; // Set caret/cursor to the end on focus change EditTextAmount.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View editText, boolean hasFocus) { if(hasFocus){ ((EditText) editText).setSelection(((EditText) editText).getText().length()); } } }); // Create a touch listener and put caret to the end (no matter where the user touched in the middle of the string) EditTextAmount.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View editText, MotionEvent event) { ((EditText) editText).onTouchEvent(event); ((EditText) editText).setSelection(((EditText) editText).getText().length()); return true; } }); // Implement a Currency Mask with addTextChangedListener EditTextAmount.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { String input = s.toString(); String output = new String(); String buffer = new String(); String decimals = new String(); String numbers = Integer.toString(Integer.parseInt(input.replaceAll("[^0-9]", ""))); if(returnNext){ returnNext = false; return; } returnNext = true; if (numbers.equals("0")){ output += "0.00"; } else if (numbers.length() <= 2){ output += "0." + String.format("%02d", Integer.parseInt(numbers)); } else if(numbers.length() >= 3){ decimals = numbers.substring(numbers.length() - 2); int commaCounter = 0; for(int i=numbers.length()-3; i>=0; i--){ if(commaCounter == 3){ buffer += ","; commaCounter = 0; } buffer += numbers.charAt(i); commaCounter++; } output = new StringBuilder(buffer).reverse().toString() + "." + decimals; } EditTextAmount.setText(output); EditTextAmount.setSelection(EditTextAmount.getText().length()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { /*String input = s.toString(); if(input.equals("0.0")){ EditTextAmount.setText("0.00"); EditTextAmount.setSelection(EditTextAmount.getText().length()); return; }*/ } @Override public void afterTextChanged(Editable s) { } }); 

希望它有帮助!

安全地做了这个技巧:

  editText.setText(""); if (!TextUtils.isEmpty(text)) { editText.append(text); } 

如果你想select所有的文本,只是input新的文字,而不是旧的,你可以使用

  android:selectAllOnFocus="true" 

类似于@Anh Duy的回答,但是它对我没有任何作用。 我也需要光标移动到最后只有当用户点击编辑文本,仍然能够select光标的位置后,这是唯一的代码已经为我工作

 boolean textFocus = false; //define somewhere globally in the class //in onFinishInflate() or somewhere editText.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { editText.onTouchEvent(event); if(!textFocus) { editText.setSelection(editText.getText().length()); textFocus = true; } return true; } }); editText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { textFocus = false; } }); 

这工作

 Editable etext = edittext.getText(); Selection.setSelection(etext,edittext.getText().toString().length());