android开发分享将光标置于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()); 

      以上就是android开发分享将光标置于EditText中的文本末尾相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/517888.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐