2016-08-02 9 views
0

ソフトキーボードが開いているときにnexus電話機の小さな逆さま三角形をユーザーが押したときに呼び出されるKeyEventアクションが不思議です。ノーマルモードネクサスで戻るボタンを押したときにネクサスの電話機が起動するキーアクションはどれですか?

は、次のようになり、通常のコードは正常に動作します: Nexus without keyboard

しかし、キーボードがポップアップしたときに、それはこのようになりますと、コードが動作しません。

Nexus with keyboard

+0

@Override公共ボイドonBackPressed(){} – JCDecary

+0

キーボードが隠され、左側に三角形の点は私はKeyEvent.KEYCODE_BACK得るが、キーボードの存在下では、私はない場合、私はにonKeyDown()を使用@JCDecaryそれは何が起こるか知っている! –

+0

多分これはあなたを助けるでしょう:http://android-developers.blogspot.ca/2009/12/back-and-other-hard-keys-three-stories.html。あなたが望むものを私はしません – JCDecary

答えて

2

Android APIの最大数5:

@Override 
public void onBackPressed() { 
    // your code. 
} 

API 5より前のAndroidの場合は、次の値を使用する必要があります。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     // your code 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 

How to handle back button in activity

EDITを参照してください:

この方法は、キーボードが非表示になっている場合にのみ機能しますが..

この回答によると:Detect back key press - When keyboard is open

最高実装するアクションはdispatchKeyEventPreImeです。 例は次のとおりです。mActivityは、あなたの活動のクラスである

@Override 
    public boolean dispatchKeyEventPreIme(KeyEvent event) { 
     Log.d(TAG, "dispatchKeyEventPreIme(" + event + ")"); 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
      KeyEvent.DispatcherState state = getKeyDispatcherState(); 
      if (state != null) { 
       if (event.getAction() == KeyEvent.ACTION_DOWN 
         && event.getRepeatCount() == 0) { 
        state.startTracking(event, this); 
        return true; 
       } else if (event.getAction() == KeyEvent.ACTION_UP 
         && !event.isCanceled() && state.isTracking(event)) { 
        mActivity.onBackPressed(); 
        return true; 
       } 
      } 
     } 

     return super.dispatchKeyEventPreIme(event); 
    } 

(これ)。

+0

私が言ったように、エミュレータで私はキーボードが存在するときに使用しますこのコードは動作しません! –

+0

キーボードが開いているとき、またはアクションが実行されていないときに、デバッガはそのコードを入力しますか? –

+0

2枚の写真を追加して質問を更新しました。 –

関連する問題