3

EditTextある種のオートフィル機能を紹介したい分野があります。私が現在やろうとしているのは、「S」ボタンが押された場合にEditTextボックスに「SpecialCT」を入力することだけです。これは私が持っているものです:

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も表示されません。また、Enterボタンを押すと、EnterボタンのKEY PRESSED前に押したさまざまなキーの数に関係なく、ログ呼び出しが2回表示されます。

編集

それで、もう少しいじった後、Log呼び出しが2回表示される理由は、Enterキーを離したときにも表示されるためであることに気付きました。ログ呼び出しを呼び出すためのSキーも取得しましたが、KEY PRESSEDそれでも認識されませんIf statement

4

1 に答える 1

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の 例を使用できます

于 2013-02-05T22:05:45.463 に答える