タブホスト内に EditText を表示しています。Tabhost は SherlockFragmentActivity 内にあります。
タッチ モードで、EditText をクリックしてフォーカスを与え、入力を開始するとします。2 ~ 3 文字入力した後、ハード キーボードを使用することにしました。最初のハード キーを押すとすぐに、タッチ モードから移動します。これにより、現在選択されているタブにフォーカスが戻ります。ハード ナビゲーション キーを使用してフォーカスを EditText に戻さない限り、EditText に入力することはできません。
この問題は、TabHost が TabActivity 内にない場合にのみ発生します。
この問題を再現する簡単なサンプル コードは、ActionBarSherlock サンプル コードの FragmentTabs アクティビティです。CustomTab を選択し、ハード キーボードを使用してアクション バーの検索ビュー内に任意のテキストを入力してみてください。フォーカスがタブに移動するだけです。
この問題は、android 2.2、4.0、および ICS エミュレーターを使用しても再現できます。
誰かもっと情報を持っていますか。この問題について?
(回避策がここに記載されているようです: https://stackoverflow.com/a/8684025/333137しかし、ハックのように見えます)
ありがとう。
編集:さらに調査したところ、TabHostがTabActivity内で使用されていない場合にのみ呼び出す必要があるTabHostクラス内のsetup()関数が見つかりました。ハードキーが押されたときだけコールバックを受け取るキーリスナーを登録します。
void setup(){
// KeyListener to attach to all tabs. Detects non-navigation keys
// and relays them to the tab content.
mTabKeyListener = new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_ENTER:
return false;
}
**mTabContent.requestFocus(View.FOCUS_FORWARD);**
return mTabContent.dispatchKeyEvent(event);
}
requestFocus(View.FOCUS_FORWARD) を呼び出している理由はわかりませんが、これはその中の EditText にフォーカスを設定しません (そうすべきですか?)。また、アクションバーの検索ビューの場合は、完全にタブの外です。