我有一个 EditText
字段,我想在其中引入某种自动填充功能。如果按下“S”按钮,我目前要做的就是用“Special CT”填充 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 不会显示我的任何一个 LogCalls。当我按下 enter 按钮时,它会显示两次 KEY PRESSED
日志调用,无论我在 enter 按钮之前按下了多少个不同的键。
编辑
所以在仔细研究之后,我意识到 Log
调用出现两次的原因是因为它在我释放回车键时也出现了。我还获得了调用 KEY PRESSED
日志调用的 S 键,但它在我的 If 语句
中仍然无法识别。
最佳答案
试试这个:
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
关于android - 在 EditText 上实现自动填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14716774/