ナビゲーションドロワーがフラグメントのコンテンツの上にあることを確認する方法はありますか?
ダミーデータを使用して小さなテストアプリケーションを作成しました。対応する番号付きのボタンとテキストビューを持つ10個のフラグメント。問題は、フラグメント要素がナビゲーションドロワーよりも優先度が高いように見えるという事実にあります。
スクリーンショットに見られるように、「0フラグメント」を開こうとすると、代わりにナビゲーションドロワーの後ろのボタンのクリックを登録することを選択します。他のコンテンツアイテムを押しても問題なく機能しますが、これは、その下に他の対話可能なアイテムがない限りです。ナビゲーションドロワーをその背後にあるコンテンツの上に適切に維持するにはどうすればよいですか?
セットする Android:clickable="true"
スライドペインレイアウトのタグ。
問題はクリックフォーカスではないようです。
訪問 https://developer.Android.com/training/implementing-navigation/nav-drawer.html#DrawerLayout
メインのコンテンツビュー(上のFrameLayout)は、DrawerLayoutの最初の子である必要があります。これは、XMLの順序がz順序を意味し、ドロワーがコンテンツの上にある必要があるためです。
フラグメントドロワーで、TouchListenerを設定してTrueを返します。それは私のために働いた
mFragmentContainerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
別の方法で解決しました。
引き出しを設定するための私のコードは次のとおりです。
/**
* Setup Navigation Drawer
*/
private void setDrawer() {
NavigationDrawerFragment mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.fragment_drawer);
mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
}
setup
メソッドはNavigationDrawerFragment
の中にあります。ここに私のコードがあります:
/**
* Users of this fragment must call this method to set up the navigation drawer interactions.
*
* @param fragmentId The Android:id of this fragment in its activity's layout.
* @param drawerLayout The DrawerLayout containing this fragment's UI.
* @param toolbar The Toolbar of the activity.
*/
public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {
View mFragmentContainerView = (View) getActivity().findViewById(fragmentId).getParent();
DrawerLayout mDrawerLayout = drawerLayout;
//noinspection deprecation
mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
ActionBarDrawerToggle mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, "Drawer opened", "Drawer closed") {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
if (!isAdded()) return;
// Solution:
// Disable click event on views below Navigation Drawer
mFragmentContainerView.setClickable(false);
getActivity().invalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (!isAdded()) return;
// Solution:
// Enable click event on views below Navigation Drawer
mFragmentContainerView.setClickable(true);
getActivity().invalidateOptionsMenu();
}
};
// Defer code dependent on restoration of previous instance state.
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mActionBarDrawerToggle.syncState();
}
});
//noinspection deprecation
mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
}
それでおしまい