Android 在EditText上实现自动填充

Android 在EditText上实现自动填充,android,android-edittext,listener,Android,Android Edittext,Listener,我有一个EditText字段,我想在该字段上引入某种自动填充功能。如果按下“S”按钮,我现在要做的就是在编辑文本框中填入“Special CT”。这就是我所拥有的: ctEditText = (EditText) findViewById( 1001 ); ctEditText.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) {

我有一个
EditText
字段,我想在该字段上引入某种自动填充功能。如果按下“S”按钮,我现在要做的就是在编辑文本框中填入“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不会显示任何一个日志调用,直到我按下键盘右下角的enter按钮。当我按下enter按钮时,它会显示两次按下的
log call,无论我在按下enter按钮之前按了多少不同的键

编辑

因此,在对它进行了更多的处理之后,我意识到,
Log
调用出现两次的原因是,当我释放enter键时,它也出现了。我还按了S键调用按下的
log调用,但在我的
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”


更好的是,您可以使用

我尝试使用第一个代码块,但不幸的是,按“S”键根本不会触发
onkeylister
,因此if语句根本不可能被访问。至于
TextWatcher
,我认为这对我的情况不是最好的。我有很多EditText字段需要操作,但只有少数字段可以在TextWatcher中受益更多,我希望保持统一。
if (ctEditText.getText().toString().equalsIgnoreCase("S"))