当用户在 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) {
}
});
我有一个仅限于数字字符的 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) {
}
});