在EditText上实现自动填充

时间:2013-02-05 20:59:39

标签: android android-edittext listener

我有一个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仍然无法识别它。

1 个答案:

答案 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