私が発見した DrawerLayout を使用すると、View がクリックされていない場合、Drawer View のクリックはそれ自体では処理されません。代わりに、ドロワーのコンテンツ ビューがそのクリック イベントを処理します。
より具体的には、DrawerLayout にはコンテンツ ビューとドロワー ビューの 2 つの子があり、側面から引き出すことができます。
私の Content View は ListView であり、私の Drawer View は Edittext を含む LinearLayout です。Drawer View は、ビュー全体を埋めるように設定されています。空白のドロワー ビューをクリックすると、EditText をクリックしなくても、下にあるコンテンツ ビューに到達し、ListView の項目がクリックされます。
これを防ぐ最善の方法は何ですか?
現時点で私はこれを持っています:
LinearLayout drawerView = (LinearLayout)findViewById(R.id.input_drawer);
drawerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do nothing just catch the click
}
});
LinearLayout は、XML で定義されている Drawer View の ViewGroup です。DrawerListenerにはクリック イベントのコールバックがないため、これを試してみましたが、下にある ListView のクリックを防ぐために機能します。しかし、これは気分が良くありません。
アップデート:
私が言ったように、DrawerView の LinearLayout の高さは "match_parent" に設定され、Drawer View 全体を埋めます。高さを「wrap_content」に設定すると、Drawer View が上部ディスプレイ境界から下部境界まで設定されず、非常に見苦しくなります。そのため、Drawer View は画面全体の高さを設定するように定義されていません。
そうは言っても、ViewGroup (LinearLayout) は Drawer View の高さを担当します。ビュー グループ内のビューがクリックされていない場合、ドロワー ビュー自体には、クリックをキャッチするリスナーがまったくありません。したがって、この場合、ViewGroup の onClickListener を定義しようとする試みが、下にあるコンテンツ ビューのクリックを防止する唯一の方法です。
私が間違っている場合は、何かを見落としている可能性があるため、修正してください。