2012-08-15 6 views
5

ソフトキーボードが表示されているときに戻るボタンを無効にする必要があります。基本的には、戻るボタンが押されたときに、キーボードを消しておき、ユーザーがそのテキストフィールドに入力したものに何らかのテキストを追加したいのです。だから基本的に私はキーボードが却下されたときを知る必要があります。周りを検索した後、私はこれのためのAPIがないことを認識し、これを行う唯一の本当の方法は、あなたのEditTextクラスを作ることです。Androidカスタム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() 
    { 

    } 

} 

のようなのEditTextを拡張し、私はまた、この方法は

@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回印刷されます。

ご協力いただければ幸いです。

答えて

5

これは、ACTION_DOWNACTION_UPの両方でdispatchKeyEventPreImeが呼び出されたためです。
KEY downが押された場合にのみ処理する必要があります。あなたはなぜ二回dispatchKeyEventPreIme

+0

ああ、愚かな私は、それを実現しているはずです。しかし、私の他の質問に関しては。キーボードが外されたときに、どのようにテキストをEditTextフィールドに渡すのか知っていますか? – AdamM

+0

編集を確認します。 – nandeesh

+0

このような簡単な修正。おかげさまで、完璧に動作します! – AdamM

3

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

を行うことができます最初の質問のために :だから

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

編集を使うのか?おそらく、このメソッドはプレスダウンイベントで呼び出されます。

関連する問題