6

私のアプリには1つありEditTextます。このため、アクティビティでキーパッド ショーを呼び出しましたEditText。キーパッドが表示され、正常に動作しています。

現在、戻るボタンを 2 回押す必要があります。戻るボタンを 2 回押したくありません。

私を案内してください、または提案してください

ここからいくつかonBackPressed()

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();

    hideKeypad();

    //saving EditText data to db.
}

コードフォームhideKeypad()

private void hideKeypad() {
       InputMethodManager imm = (InputMethodManager) 
        getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(edittext1.getWindowToken(), 0);
}
4

3 に答える 3

1

この方法を使用すると、すでに行ったことと似ていますが、少し変更しました。メイン レイアウトのリスナーを登録し、そのオブジェクトを param として渡して、編集テキストの外側をクリックしたときに、つまり. メイン レイアウトのキーパッドはなくなります。

/** Close Keypad on touch.
 * @param view on which click happens. */

 public void closeKeyPad(View view)
    {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);    
    }
于 2013-03-20T09:58:17.033 に答える
1

押してキーボードを閉じるのは、UI の標準機能です。なぜこれを変更したいのですか?

Android デバイスでソフト キーボードを使用することに慣れているユーザーは、もう一度押してキーボードを閉じてから、もう一度アプリケーションに戻ることに慣れています。

キーボードが表示されているときにアプリ内で戻るボタンを戻すと、標準の Android ナビゲーションとは異なるナビゲーションになり、多くのユーザーが不満を感じる可能性があります。

それに加えて、キーボードが表示されているときにキーボードのforが実行されるため、 youronBackPressedは呼び出されませんonBackPressedonBackPressed

Mr.Meの答えは、あなたがそのように行きたい場合の方法ですが、私はお勧めしません.

于 2013-03-20T10:06:58.487 に答える
0

問題は、キーボードBackPressedが最初のイベントを消費することです。あなたにはどうすることもできません。これを解決するには、キーボードの非表示イベントをリッスンして、アクティビティを終了します。

それを行うコード:

    edit.setOnEditorActionListener(
     new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH ||
        actionId == EditorInfo.IME_ACTION_DONE ||
        event.getAction() == KeyEvent.ACTION_DOWN &&
        event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
    if (!event.isShiftPressed()) {
       // the user is done typing.  finish the activity
       finish();
       return true; // consume.
    }                
}
return false; // pass on to other listeners. 
}
});
于 2013-03-20T10:04:32.437 に答える