58

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

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

ここに画像の説明を入力

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

4

6 に答える 6

4

問題はクリックフォーカスのせいではないようですが、

https://developer.android.com/training/implementing-navigation/nav-drawer.html#DrawerLayoutにアクセスしてください

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

于 2015-09-23T09:32:13.247 に答える
3

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

        mFragmentContainerView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });
于 2015-11-06T04:31:37.993 に答える
2

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

Drawerを設定するための私のコードは次のとおりです。

/**
 * 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メソッドは my の中にあり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);
}

それでおしまい

于 2016-10-19T12:13:26.977 に答える
-1

さて、この問題の解決策を 1 つ見つけました。引き出しが開いているときは、使用するレイアウトで BringToFront() メソッドを呼び出すことで、ナビゲーション バーを前面に移動できます。これにより、新しい項目が選択されるまで、ナビゲーション ドロワーが下にあるすべてのコンテンツの上に表示されます。

すなわち:

@Override
public void onDrawerOpened(View drawerView)
   {
   activity.getActionBar().setTitle("Select content");
   activity.invalidateOptionsMenu();
   drawerLayout.bringToFront();
   }
于 2013-07-06T01:08:46.523 に答える