如何使用ActionBarDrawerToggle关闭左侧和右侧右侧导航抽屉?

时间:2015-12-07 11:07:50

标签: android actionbardrawertoggle

我的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。

2 个答案:

答案 0 :(得分:0)

文档

中对此进行了解释

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

  

public void setToolbarNavigationClickListener(View.OnClickListener onToolbarNavigationClickListener)

     

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

答案 1 :(得分:0)

我终于找到了解决方案。而不是在actionBarDrawerToggle上设置setToolbarNavigationClickListener设置工具栏上的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);
        }
    }
}