将光标置于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());