2
我有一个EditText
字段,我想介绍某种自动填充功能。如果按下“S”按钮,我目前所要做的就是用“特殊CT”填充EditText框。这是我的:在EditText上实现自动填充
ctEditText = (EditText) findViewById(1001);
ctEditText.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.i("KEY", "PRESSED");
// if keydown and "enter" is pressed
if ((event.getAction() == KeyEvent.ACTION_DOWN)
&& (keyCode == KeyEvent.KEYCODE_ENTER)) {
return true;
} else if ((event.getAction() == KeyEvent.ACTION_DOWN)
&& (keyCode == KeyEvent.KEYCODE_S)) {
Log.i("KEY", "S");
if(ctEditText.getText().toString().length() == 1) {
ctEditText.setText("Special CT");
}
return true;
}
return false;
}
});
有了这段代码,按下“S”按钮对我来说绝对没有什么。在我按下键盘右下角的输入按钮之前,我的LogCat不会显示任何LogCall。当我按下输入按钮时,无论在输入按钮之前按下了多少个不同的按键,它都会显示KEY PRESSED
日志调用两次。
编辑
所以它乱搞经过一些我已经意识到,Log
呼叫出现两次的原因是因为当我释放了输入键,以及它正在出现。我也有S键拨打KEY PRESSED
日志通话,但它仍然不被我的If statement
识别。
我尝试使用第一码块,但不幸的是按下“S”键根本不触发“OnKeyListener”,所以if语句甚至没有机会到达。至于'TextWatcher',我认为这对我的情况来说不是最好的。我有很多EditText字段可以操作,但是只有少数人可以通过TextWatcher获得更多收益,我想保持它的统一。 – JuiCe