5

ナビゲーション ドロワーを持つ Android アクティビティでフォーカスをクリアする最良の方法は何でしょうか。

問題は、ユーザーがテキスト ボックスを選択しているときに、ナビゲーション ドロワーを開くと、バック イベントがドロワーによって消費されず、ナビゲーションが 1 ステップ戻ってドロワーが開いたままになることです。

現在、アクティビティでこれを使用して解決しましたが、誰かが ActionBarDrawerToggle イベントを使用する必要のない別のソリューションを使用しているかどうかを知りたいです。

/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
    View window = findViewById(R.id.content_frame);
    window.clearFocus();
}
4

1 に答える 1

5

実際、ドロワーが開いたときにフォーカスがないように見えるため、onKeyUp呼び出されません。ホスト アクティビティでこれを確認し、onBackPressed DrawerLayout#hasFocus()アクティビティにフォーカスを取得したビュー (EditText など) がある場合は false を返します。

descendantFocusabilityそのプロパティを台無しにしようとさえしましたが、うまくいきませんでした。私はあなたがしたのと同様のアプローチでこれを修正することができました:引き出しのレイアウトはフォーカスを要求しています:

mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() {
    @Override
    public void onDrawerOpened(View drawerView) {
        mDrawerLayout.requestFocus();
    }
});

コンテンツ ViewGroup からフォーカスをクリアしていますが、誰がフォーカスを取得するのかはわかりません。おそらくビューはありません。
正直なところ、これは DrawerLayout のバグのように思えます。まるで開いているかのように、フォーカスが得られるはずです。

于 2014-01-08T09:50:23.603 に答える