【问题标题】:Android: Insert text into EditText at current positionAndroid:在当前位置将文本插入EditText
【发布时间】:2011-04-06 06:26:35
【问题描述】:

我想通过按下按钮将常量字符串插入到 EditText 中。该字符串应插入到 EditText 中的当前位置。 如果我使用EditText.append,文本将插入到 EditText 的末尾。

我该怎么做?我找不到合适的方法。

【问题讨论】:

    标签: android insert android-edittext


    【解决方案1】:

    Cpt.Ohlund 给了我正确的提示。我现在解决了这个问题,部分使用EditText.getSelectionStart(),但我意识到你也可以用相同的表达式替换选定的文本,你不需要String.subString()

    int start = Math.max(myEditText.getSelectionStart(), 0);
    int end = Math.max(myEditText.getSelectionEnd(), 0);
    myEditText.getText().replace(Math.min(start, end), Math.max(start, end),
            textToInsert, 0, textToInsert.length());
    

    这适用于两者,在当前位置插入文本并替换用户选择的任何文本。 Math.max() 在第一行和第二行中是必需的,因为如果 EditText 中没有选择或光标,getSelectionStart()getSelectionEnd() 都将返回 -1。第三行中的Math.min()Math.max() 是必要的,因为用户可能已经向后选择了文本,因此 start 将具有比 end 更高的值,这对于 Editable.replace() 是不允许的。

    【讨论】:

    【解决方案2】:

    这似乎更简单:

    yourEditText.getText().insert(yourEditText.getSelectionStart(), "fizzbuzz");
    

    但是,如果您想用插入的文本替换任何选定的文本,Manuel 的答案可能会更好。

    【讨论】:

    • 这无疑是最好的答案。它应该被接受。我没有看到重新发明轮子的理由,它保持Editable 而不用setText() 调用覆盖它,这在大多数应用程序中都是至关重要的。 EditText中的其他元素最干净、最简单且对其他元素的阻碍最小
    • 这比使用子字符串快吗?
    • 如果已经选择了一个文本范围,那么仅仅在选择的开头插入可能不是用户期望的。
    • 文档明确说你不应该修改 EditText.getText() developer.android.com/reference/android/widget/…987654321@ 返回的对象的内容
    【解决方案3】:

    尝试使用EditText.getSelectionStart() 获取光标的当前位置。然后您可以使用 String.subString 获取光标前后的文本并将您的文本插入到中间。

    【讨论】:

      【解决方案4】:

      我认为这个功能会对你有所帮助:

      public void insertConstantStr(String insertStr) {
          String oriContent = editText.getText().toString();
          int index = editText.getSelectionStart() >= 0 ? editText.getSelectionStart() : 0;
          StringBuilder sBuilder = new StringBuilder(oriContent);
          sBuilder.insert(index, insertStr);
          editText.setText(sBuilder.toString());
          editText.setSelection(index + insertStr.length());
      }
      

      【讨论】:

      • 太棒了,尝试了所有其他解决方案,但都不适用于 Xamarin Android。在 Java 中,Replace 函数的参数比 Xamarin 中的要多。这简直太完美了!
      【解决方案5】:

      Editable editable = new SpannableStringBuilder("在这里传递一个字符串");

      yourEditText.text = 可编辑;

      【讨论】:

        【解决方案6】:

        对于 Kotlin 只需这样做:

        editText.text.insert(editText.selectionStart, "Your Text Here")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-06-20
          • 2011-05-26
          • 1970-01-01
          • 1970-01-01
          • 2015-02-12
          • 2017-07-05
          • 2011-01-08
          相关资源
          最近更新 更多