我有一个EditText
字段,我想介绍某种自动填充功能。我正在尝试做的就是如果按下“S”按钮,则在EditText框中填入“Special CT”。这就是我所拥有的:
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
仍然无法识别它。
答案 0 :(得分:1)
试试这个:
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 (ctEditText.getText().toString().equalsIgnoreCase("S")) {
Log.i( "KEY", "S" );
ctEditText.setText( "Special CT" );
return true;
}
else if ((event.getAction() == KeyEvent.ACTION_DOWN)
&& (keyCode == KeyEvent.KEYCODE_ENTER)) {
return true;
}
return false;
}
});
只需检查输入的文字是否等于“S”
if (ctEditText.getText().toString().equalsIgnoreCase("S"))
更好的是,您可以使用TextWatcher example