Android OnKeyListener更改编辑文本
我正试图使用OnKeyListener根据条目更改EditText的内容,但我在这样做时遇到了问题,因为它似乎被调用了两次 以下是代码的简化版本:Android OnKeyListener更改编辑文本,android,Android,我正试图使用OnKeyListener根据条目更改EditText的内容,但我在这样做时遇到了问题,因为它似乎被调用了两次 以下是代码的简化版本: public class MyKeyListener implements View.OnKeyListener{ EditText et; public MyKeyListener(EditText editText){ this.et = editText; } public boolean o
public class MyKeyListener implements View.OnKeyListener{
EditText et;
public MyKeyListener(EditText editText){
this.et = editText;
}
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_0){
this.et.setText("0");
} else {
this.et.setText("1");
}
}
}
在主要活动中,我有:
EditText et = (EditText) findViewById(R.id.myET);
MyKeyListener mkl = new MoneyKeyListener(et);
et.setOnKeyListener(mkl);
你在用硬件键盘吗?根据软键,键盘不必调用onKeyListener回调。也就是说,您看到它被调用两次的原因是因为有一个onKeyDown事件和一个onkeydup事件。在onKey(…)方法中,您应该检查KeyEvent以对预期事件作出反应(向下或向上)。您使用的是硬件键盘吗?根据软键,键盘不必调用onKeyListener回调。也就是说,您看到它被调用两次的原因是因为有一个onKeyDown事件和一个onkeydup事件。在onKey(…)方法中,您应该检查KeyEvent以对预期事件做出反应(向下或向上)。对于两次调用事件,我认为您可以从@RScottCarson的答案中了解到这一点。对于您正在使用的
软键盘
,可以通过以下方式检测退格:
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_DEL) {
// for backspace...check
}
//rest of the code
return false;
}
两次呼吁这一事件,我想你从@RScottCarson的回答中就知道了。对于您正在使用的
软键盘
,可以通过以下方式检测退格:
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_DEL) {
// for backspace...check
}
//rest of the code
return false;
}
谢谢我会检查的!至于键盘,我使用的是软键盘,但我看不到任何其他检测退格键的方法(我以前使用的是TextWatcher,但它不检测退格…),谢谢。我会检查的!至于键盘,我使用的是软键盘,但我看不到任何其他检测退格键的方法(我以前使用的是TextWatcher,但它不检测退格…)但这不是只保证对硬键盘有效吗?我认为对软键盘也有效…你可以尝试,但这不是只保证对硬键盘有效吗?我认为对软键盘也有效…你可以尝试