【问题标题】:Insert character between the cursor position in edit text在编辑文本的光标位置之间插入字符
【发布时间】:2021-09-06 18:35:35
【问题描述】:

我的代码是:

EditText edt
    
edt.addTextChangedListener(new TextWatcher() {
    
    @Override
    public void afterTextChanged(Editable arg0) {
    
        final String number = edt.getText().toString();
    
        int count = arg0.length();
        edt.setSelection(count);
    }
    
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // TODO Auto-generated method stub
    }
    
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        final String number = edt.getText().toString();
    }
}

我也有拨号盘。当我单击拨号盘中的特定号码时,我需要将该号码添加到当前光标位置。另外,当我按下删除时,我需要从当前光标位置删除数字。

拨号盘图片

【问题讨论】:

    标签: android


    【解决方案1】:

    试试下面的代码

    int start =editText.getSelectionStart(); //this is to get the the cursor position
    String s = "Some string";
    editText.getText().insert(start, s); //this will get the text and insert the String s into   the current position
    

    这是从 EditText 中删除选定文本的代码

    int start = t1.getSelectionStart();  //getting cursor starting position
    int end = t1.getSelectionEnd();      //getting cursor ending position
    String selectedStr = t1.getText().toString().substring(start, end);    //getting the selected Text
    t1.setText(t1.getText().toString().replace(selectedStr, ""));    //replacing the selected text with empty String and setting it to EditText
    

    【讨论】:

    • @Aju 实际上,删除部分是一个 hack,它不会总是像这样,如果你有这样的文字:“Hello Hello Hello”,而你只想删除中间的“Hello”,它就不会起作用。
    【解决方案2】:

    插入:

        String dialled_nos = dialpad_text.getText().toString();
        String number = view.getTag().toString(); // 1,2....9,0
        int start = dialpad_text.getSelectionStart(); 
        dialled_nos = new StringBuilder(dialled_nos).insert(start, number).toString();
        dialpad_text.setText(dialled_nos);
        dialpad_text.setSelection(start+1); // cursor will move to new position
    

    删除:

        String dialled_nos = dialpad_text.getText().toString();
        int remove_index_position = dialpad_text.getSelectionStart()-1; 
        StringBuilder dialled_nos_builder = new StringBuilder(dialled_nos);
        if(remove_index_position>=0) {
            dialled_nos_builder.deleteCharAt(remove_index_position);
            dialpad_text.setText(dialled_nos_builder.toString()); 
            dialpad_text.setSelection(remove_index_position);
        }
    

    【讨论】:

    • 谢谢。您的删除方法帮助了我!
    • 这应该是公认的答案。这非常有效。
    【解决方案3】:

    您需要为您的按钮实现OnClickListener。在里面你需要更新编辑器的文本。例如“5”按钮:

    public void onClick(View v) {
    
        String currentText = edt.getText();
        edt.setText(currentText + "5");
    }
    

    【讨论】:

    • EditText 类中有getText() & setText()
    【解决方案4】:
    editText.getText().insert(editText.getSelectionStart(), text);
    

    文本是您要插入的实际字符串。

    【讨论】:

      【解决方案5】:
      etPnr.addTextChangedListener(new TextWatcher() {
              @Override
              public void beforeTextChanged(CharSequence s, int start, int count, int after) {
              }
      
              @Override
              public void onTextChanged(CharSequence s, int start, int before, int count) {
                  etPnr.removeTextChangedListener(this);
      
                  // TODO: If you want to do on the text, apply here
      
                  if (start + count > etPnr.length())
                      etPnr.setSelection(etPnr.length());
                  else
                      etPnr.setSelection(start + count);
      
                  etPnr.addTextChangedListener(this);
              }
      
              @Override
              public void afterTextChanged(Editable s) {
              }
          });
      

      你可以试试

      【讨论】:

        【解决方案6】:

        我目前使用这个解决方案:

        public static void insertText(String text, EditText editText)
        {
            int start = Math.max(editText.getSelectionStart(), 0);
            int end = Math.max(editText.getSelectionEnd(), 0);
        
            editText.getText().replace(Math.min(start, end), Math.max(start, end), text, 0, text.length());
            try
            {
                editText.setSelection(start + 1);
            }
            catch (final IndexOutOfBoundsException e)
            {
        
            }
        }
        

        【讨论】:

          【解决方案7】:

          对于 Kotlin

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

          【讨论】:

            猜你喜欢
            • 2016-08-01
            • 1970-01-01
            • 2022-07-14
            • 2022-11-07
            • 2011-07-09
            • 2010-11-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多