5

ソフトキーボードが表示されているときに戻るボタンを上書きしたい。基本的に、戻るボタンが押されたときに、キーボードを閉じて、ユーザーがその編集テキストフィールドに入力したものにテキストを追加したいと思います。だから基本的に私はキーボードがいつ閉じられるかを知る必要があります。調べてみたところ、このためのAPIはなく、これを行う唯一の実際の方法はEditTextクラスを作成することであることに気付きました。

だから私は自分のEditTextクラスを作成し、このようにEditTextを拡張しました

public class CustomEditText extends EditText
{

    public CustomEditText(Context context)
    {
        super(context);
        init();
    }

    public CustomEditText(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        init();
    }

    public CustomEditText(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        init();
    }

    private void init()
    {

    }

}

このメソッドも追加しました

    @Override
        public boolean dispatchKeyEventPreIme(KeyEvent event)
        {
            if (KeyEvent.KEYCODE_BACK == event.getKeyCode())
            {
                Log.v("", "Back Pressed");

                            //Want to call this method which will append text
                            //init();
            }
            return super.dispatchKeyEventPreIme(event);
        }

このメソッドは戻るボタンをオーバーライドし、キーボードを閉じますが、EditTextフィールドにテキストを渡す方法がわかりません。誰かが私がこれを行う方法を知っていますか?

また、もう1つの簡単な質問ですが、このメソッドが2回呼び出される理由を誰かが知っていますか?ご覧のとおり、動作をテストするための簡単なlogcatメッセージを追加しましたが、戻るボタンを押すと2回出力されます。これを行う理由は何ですか?

どんな助けでも大歓迎です!!

4

2 に答える 2

5

これは、ACTION_DOWNACTION_UPの両方でdispatchKeyEventPreImeが呼び出されているためです。
キーを押したときにのみ処理する必要があります。だから使用する

if(event.getAction () == KeyEvent.ACTION_DOWN)

編集:あなたができる最初の質問のために

setText(getText().toString() + " whatever you want to append"); 

dispatchKeyEventPreIme

于 2012-08-15T08:28:17.743 に答える
3

なぜ2回?おそらく、このメソッドは、プレスダウンおよびアップイベントで呼び出されます。

于 2012-08-15T08:31:13.433 に答える