【问题标题】:Implementing AutoFill on EditText在 EditText 上实现自动填充
【发布时间】:2013-02-05 20:59:39
【问题描述】:

我有一个EditText 字段,我想在该字段上介绍某种自动填充功能。如果按下“S”按钮,我目前要做的就是用“特殊 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”按钮对我毫无用处。在我按下键盘右下角的 Enter 按钮之前,我的 LogCat 不会显示我的任何一个 LogCall。当我按下回车键时,它会显示两次KEY PRESSED 日志调用,无论我在回车键之前按下了多少个不同的键。

编辑

所以在搞砸了一些之后,我意识到Log 调用出现两次的原因是因为它在我释放回车键时也会出现。我还获得了 S 键来调用 KEY PRESSED 日志调用,但在我的 If statement 中仍然无法识别。

【问题讨论】:

    标签: android android-edittext listener


    【解决方案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

    【讨论】:

    • 我尝试使用第一个代码块,但不幸的是,按下“S”键根本不会触发OnKeyListener,因此 if 语句甚至没有机会到达。至于TextWatcher,我认为这不是最适合我的情况。我有很多 EditText 字段要操作,但只有少数几个可以通过 TextWatcher 受益更多,我想保持统一。
    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 2020-09-22
    • 2012-03-17
    • 2018-08-10
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多