当用户在 EditText 中输入新字符时如何捕获事件?

How to capture event when user has entered a new character in a EditText?

我有一个仅限于数字字符的 EditText,我需要在用户输入数字和用户按“.”时执行特殊操作。虚拟键盘上的字符。

numberEditText = new EditText(this);
numberEditText.setInputType(InputType.TYPE_CLASS_NUMBER);

我知道存在这个监听器:

numberEditText.setOnEditorActionListener(new OnEditorActionListener() {         
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {               
                return false;
            }
        });

但是我不知道如何使用它来实现我的需求。

如有帮助将不胜感激。

谢谢

编辑:显然它不适用于 OP。

if(event.getKeyCode() == KEYCODE_NUMPAD_DOT) { ... }

可以。也许你必须在 "KEYCODE_NUMPAD_DOT"

前面添加一些东西

此处提供所有键码:http://developer.android.com/reference/android/view/KeyEvent.html

添加文本更改侦听器。

editText.addTextChangedListener(new TextWatcher() {

   public void afterTextChanged(Editable s) {}

   public void beforeTextChanged(CharSequence s, int start, int count, int after) {
   }

   public void onTextChanged(CharSequence s, int start,
     int before, int count) {

     //Do your stuff here

   }
  });

是这样的-

editText.addTextChangedListener(new TextWatcher() {

       @Override
       public void afterTextChanged(Editable s) {}

       @Override    
       public void beforeTextChanged(CharSequence s, int start,
         int count, int after) {
       }

       @Override    
       public void onTextChanged(CharSequence s, int start,
         int before, int count) {
          if(s.equals("."))
            editText.setText("");
       }
      });

您可以像这样将文本观察器与您的编辑文本一起使用

editText.addTextChangedListener(new TextWatcher() {

   public void afterTextChanged(Editable s) {}

   public void beforeTextChanged(CharSequence s, int start, int count, int after) {
   }

   public void onTextChanged(CharSequence s, int start,
     int before, int count) {

     //Do your stuff here

   }
  });

你可以用上面的代码块得到最后一个inout字符。

getSelectionStart() 获取光标位置。输入一个字符后,光标会移动到该字符的右侧。所以你可以通过 (cursor position -1)

得到最后输入的字符

edt.addTextChangedListener(新的 TextWatcher() { @覆盖 public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            String text = charSequence.toString();

            if (text.equals("")) return;

            int index = edt.getSelectionStart() - 1;

            Character lastCharacter = text.charAt(index);

            Log.v("LAST_CHARACTER", "Index: " + index + " --> " + lastCharacter.toString());
        }

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