【问题标题】:How to use ActionBarDrawerToggle to close both left & right navigation drawers?如何使用 ActionBarDrawerToggle 关闭左右导航抽屉?
【发布时间】:2015-12-07 11:07:50
【问题描述】:

我的 activity.xml 中有以下布局

`

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/store_page_layout"
    tools:context=".StorePage">
    <include
        android:id="@+id/store_page_toolbar"
        layout="@layout/toolbar"/>
    <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/store_drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/store_page_toolbar">
        <FrameLayout
            android:id="@+id/container_body"
            android:layout_width="fill_parent"
            android:layout_height="@dimen/container_body_height"
            android:layout_weight="1">
            <android.support.v7.widget.CardView
                xmlns:card_view="http://schemas.android.com/apk/res-auto"
                android:id="@+id/card_view"
                android:layout_gravity="center"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:layout_marginRight="16dp"
                android:layout_marginLeft="16dp"
                android:elevation="6dp"
                card_view:cardCornerRadius="4dp"
                android:background="@drawable/landing_animated_button_background">
            </android.support.v7.widget.CardView>
        </FrameLayout>
        <android.support.v7.widget.RecyclerView
            android:id="@+id/store_menu_drawer"
            android:layout_width="@dimen/navigation_drawer_width"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="@color/black_200"/>
        <android.support.v7.widget.RecyclerView
            android:id="@+id/store_cart_drawer"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="end"
            android:layout_marginLeft="@dimen/nav_drawer_left_min_margin"
            android:background="@color/black_200"/>
    </android.support.v4.widget.DrawerLayout>
</RelativeLayout>

`

不,我继续在我的工具栏小部件上添加了 ActionBarDrawerToggle,我希望从汉堡包图标中获得的行为是,如果我单击它,左抽屉打开(工作),我再次单击它,左抽屉关闭(工作),我打开通过从右到左拖动右抽屉加上汉堡图标变为箭头(工作),如果我点击箭头图标它也会关闭右抽屉(不工作)

如您所见,我希望汉堡图标根据哪个抽屉打开来关闭左右抽屉,我的方法是听点击箭头图标并决定哪个抽屉打开然后关闭它。我无法弄清楚如何在 ActionBarDrawerToggle 类自动添加的汉堡包或箭头图标上设置 onClickListener。

【问题讨论】:

    标签: android actionbardrawertoggle


    【解决方案1】:

    这在文档中有解释

    http://developer.android.com/reference/android/support/v7/app/ActionBarDrawerToggle.html#setToolbarNavigationClickListener(android.view.View.OnClickListener)

    public void setToolbarNavigationClickListener(View.OnClickListener onToolbarNavigationClickListener)

    当 DrawerToggle 用 Toolbar 构造时,它设置点击 导航图标上的侦听器。如果你想听点击 禁用 DrawerToggle 时的导航图标 (setDrawerIndicatorEnabled(boolean),你应该调用这个方法 您的侦听器和 DrawerToggle 会将点击事件转发给 抽屉指示器被禁用时的监听器。

    【讨论】:

    • 我也尝试过,但仍然没有得到回应。 actionBarDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("ICON_CLICKED", "Clicked"); } });
    • 我会仔细检查你的代码,因为我怀疑如果它不是真的文档会说明这一点。
    • 你能指出一些使用这个监听器的示例代码吗?也许我可以把我的和它比较一下,看看出了什么问题。
    【解决方案2】:

    我终于找到了解决办法。而不是在 actionBarDrawerToggle 上设置 setToolbarNavigationClickListener 在 Toolbar 上设置 setNavigationOnClickListener 效果很好。我的代码如下。

    toolbar.setNavigationOnClickListener(new toolBarNavigationIconListener());
    

    而OnClickListener如下。

        private class toolBarNavigationIconListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            if(!storeDrawer.isDrawerOpen(Gravity.RIGHT) && !storeDrawer.isDrawerOpen(Gravity.LEFT)) {
                storeDrawer.openDrawer(Gravity.LEFT);
            } else if(storeDrawer.isDrawerOpen(Gravity.LEFT)) {
                storeDrawer.closeDrawer(Gravity.LEFT);
            } else if(storeDrawer.isDrawerOpen(Gravity.RIGHT)) {
                storeDrawer.closeDrawer(Gravity.RIGHT);
            }
        }
    }
    

    【讨论】:

    • 感谢您分享您的解决方案。为了理解它,我想知道您的变量storeDrawer 是如何定义的?
    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    相关资源
    最近更新 更多