2011-10-26 2 views
0

私は、ユーザーがbackPressedメソッドをオーバーライドして戻るボタンを押したときに確認ダイアログを表示するロジックを作ったが、これは異常な動作を意味する。ソフト入力キーボードが表示されている場合は、バックキーイベントでは非表示にし、他のバックキーイベントでは確認ダイアログを起動する必要があります。これを達成する方法がありますか?おそらくソフト入力キーボードがアップしているかどうかを検出し、確認ダイアログをバイパスしますか?ここでアプリケーションを終了するための確認ダイアログを表示するために、バックプレス(keyDown - 以前のバージョン)を処理する方法は?

が、これは明確にするコードサンプルです:ソフトキーパッドを隠すために

public boolean onKeyUp(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
       //here is the mystery 
       if (soft keyboard is visible) 
       { 
        return super.onKeyUp(keyCode, event); 
       } else 
       { 
           //method which shows the close dialog and close the application 
        onBackPressed(); 
        return true; 
       } 
    } 
       return super.onKeyUp(keyCode, event); 
} 

答えて

2

ソフトキーボードが表示されている場合、アクティビティでキーイベントを受信できないと思われます。デフォルトの動作は、ソフトキーが消える戻るキーです。

また、キーイベントをブロックすることもできます。単純な方法はsetOnKeyListenerです。ビューにフォーカスがあることを確認し、キーイベントを受け取ったときにtrueを返します。

+0

はい、そうです。実際の問題は、私がonKeyDownとonKeyUpの両方をオーバーライドし、double backPressedを呼び出すようにしたことでした。今私はonKeyDownだけをオーバーライドし、ソフトキーボードはイベントを消費します。別の奇妙な動作が発生しました。つまり、新しいバックキーイベントが検出されたときです。onBackPressedは無視されます。私はそれを処理しなければならない。良い答えをありがとう。 –

1

コード:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 

あなたはこのコードを置くことができる関係なくキーボードが表示されなかったりしませ

れonBackKeyPressed
+0

ありがとうございました。私の本当の問題は、キーボードが私のバックイベントを消費してから閉じる確認ダイアログが表示されることです(同じバックイベント)。私が本当に望むのは、画面に干渉がない場合(ソフトキーボード、スピナードロップダウンなど)にのみ確認ダイアログを表示するロジックを作成することです。 –

関連する問題