【问题标题】:Android edittext append and remove appendAndroid edittext 追加和删除追加
【发布时间】:2016-01-06 14:42:32
【问题描述】:

我正在尝试制作editText,我在其中插入一些文本。在每三个字符之后,我想插入破折号。

例子:

类型:123

结果:1​​23-

现在,当光标在破折号后面并且您按删除时,我想删除破折号和破折号后面的字符。 例如:

123-

删除键后的结果:12。 怎么做。谢谢你的建议。

编辑

我的代码是:

 EditText editText;
boolean keyDel = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText = (EditText) findViewById(R.id.editText);
    editText.setOnKeyListener(new View.OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_DEL) {
                keyDel = true;
            }
            return keyDel;
        }
    });

    editText.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) {
            String str = s.toString();
            System.out.println(str.length());
            if (str.length() == 3) {
                str = str + "-";
            } else if (str.length() == 7) {
                str = str + "-";
            } else if (str.length() % 4 == 0 && keyDel == true) {
                str = str.substring(0, str.length() - 2);
            } else {
                return;
            }
            editText.setText(str);
            editText.setSelection(editText.getText().length());
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

}

我发现 Android 4.4.2 和 higer 不支持 keyevent。

【问题讨论】:

    标签: android append textedit


    【解决方案1】:

    onTextChanged 每次添加和删除时都会调用。因此,如果您的字符串的长度为 3,则添加您的 - 并且新长度为 4。如果您按 delete(新长度再次为 3),则调用 onTextChanged 并再次添加 -。所以只有在没有从文本中删除任何内容的情况下添加一些内容。

    if (count > before) {
             if (count == 3 || count == 7) {
                 str = str + "-";
             } else {
                 return;
             }
             input.setText(str);
             input.setSelection(input.getText().length());
    }
    

    【讨论】:

      【解决方案2】:

      我受到this answer 的启发来实现你想要的:

          String mTextValue;
          Character mLastChar = '\0'; // init with empty character
          int mKeyDel;
      
      
          myEditText.addTextChangedListener(new TextWatcher() {
      
              @Override
              public void onTextChanged(CharSequence s, int start, int before, int count) {
      
                 boolean flag = true;
                 String eachBlock[] = myEditText.getText().toString().split("-");
                 for (int i = 0; i < eachBlock.length; i++) {
                      if (eachBlock[i].length() > 4) {
                          flag = false;
                      }
                 }
                 if (flag) {
      
                    myEditText.setOnKeyListener(new View.OnKeyListener() {
      
                     @Override
                     public boolean onKey(View v, int keyCode, KeyEvent event) {
      
                            if (keyCode == KeyEvent.KEYCODE_DEL)
                                  mKeyDel = 1;
                                  return false;
                            }
                      });
      
                     if (mKeyDel == 0) {
      
                        if (((myEditText.getText().length() + 1) % 4) == 0) {
                            myEditText.setText(myEditTex.getText() + "-");
                            myEditText.setSelection(myEditText.getText().length());
                        }
                        mTextValue = myEditText.getText().toString();
                     } else {
                        mTextValue = myEditText.getText().toString();
                        if (mLastChar.equals('-')) {
                             mTextValue = mTextValue.substring(0, mTextValue.length() - 1);
                             myEditText.setText(mTextValue);
                             myEditText.setSelection(mTextValue.length());
                        }
                        mKeyDel = 0;
                     }
      
                } else {
                    myEditText.setText(mTextValue);
                }
      
             }
      
             @Override
             public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                  if (s.length()>0) {// save the last char value
                      mLastChar = s.charAt(s.length() - 1);
                  } else {
                      mLastChar = '\0';
                  }
             }
      
             @Override
             public void afterTextChanged(Editable s) {}
      
        });
      

      【讨论】:

        【解决方案3】:

        我自己对 android 编程比较陌生。尽管如此,我认为每次调用“setText”时都会触发一个新的 onTextChanged 事件。 在我的应用程序中,我删除了侦听器,设置文本,然后再次添加侦听器以避免此问题。但为此,您必须保存对 TextWatcher 的引用。

        即鉴于您的 Activity 扩展了 TextWatcher:

        edittext.removeTextChangedListener(this);
        editText.setText(str);
        edittext.addTextChangedListener(this);
        

        您也可以使用以下命令将光标置于末尾:

        myedittext.append("");
        

        【讨论】:

          猜你喜欢
          • 2015-08-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-10
          • 2012-10-06
          • 1970-01-01
          • 2019-05-03
          • 2013-04-17
          相关资源
          最近更新 更多