web-dev-qa-db-ja.com

ナビゲーションドロワー-ドロワーの背後にあるアイテムのクリックスルーを無効にする

ナビゲーションドロワーがフラグメントのコンテンツの上にあることを確認する方法はありますか?

ダミーデータを使用して小さなテストアプリケーションを作成しました。対応する番号付きのボタンとテキストビューを持つ10個のフラグメント。問題は、フラグメント要素がナビゲーションドロワーよりも優先度が高いように見えるという事実にあります。

enter image description here

スクリーンショットに見られるように、「0フラ​​グメント」を開こうとすると、代わりにナビゲーションドロワーの後ろのボタンのクリックを登録することを選択します。他のコンテンツアイテムを押しても問題なく機能しますが、これは、その下に他の対話可能なアイテムがない限りです。ナビゲーションドロワーをその背後にあるコンテンツの上に適切に維持するにはどうすればよいですか?

53
user1240989

セットする Android:clickable="true"スライドペインレイアウトのタグ。

130

問題はクリックフォーカスではないようです。

訪問 https://developer.Android.com/training/implementing-navigation/nav-drawer.html#DrawerLayout

メインのコンテンツビュー(上のFrameLayout)は、DrawerLayoutの最初の子である必要があります。これは、XMLの順序がz順序を意味し、ドロワーがコンテンツの上にある必要があるためです。

4
theinlin kyaw

フラグメントドロワーで、TouchListenerを設定してTrueを返します。それは私のために働いた

        mFragmentContainerView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });
3
Everson Rafael

別の方法で解決しました。

引き出しを設定するための私のコードは次のとおりです。

/**
 * 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);
}

それでおしまい

2
blueware