如何使用可见句柄实现DrawerLayout

Arm*_*ier 29 android android-layout navigation-drawer drawerlayout

我已成功为我的应用程序实现了NavigationDrawer.

我的应用程序显示在屏幕左侧打开的抽屉.

我的问题是我需要在左边添加一个按钮.可以单击或滑动该按钮以打开左侧抽屉.我能做到的.

但按钮应该看起来像抽屉的一部分会溢出到屏幕上.

这意味着当抽屉打开和关闭时,按钮应同时滑动.

关闭状态:

在此输入图像描述

开放状态

在此输入图像描述

我尝试将按钮添加到左侧抽屉的布局中,但似乎您无法使其显示在其边界之外,并且当您关闭它时,抽屉将始终完全隐藏.

现在我正在尝试添加它以向主DrawerLayout添加一个按钮并使其与左抽屉的右侧对齐...但没有运气......看起来像DrawerLayout不能有两个以上的孩子.. .

任何帮助将不胜感激.

我正在使用支持库(v4)

[编辑]我支持API级别8 ...所以不能使用ImageView.setTranslationXView.OnAttachStateChangeListener

Nik*_*ski 12

这很棘手.

我认为这与新版Google地图应用中的抽屉手柄相似.不要相信我的话,不确定.:)

我写的切换位于Activity内容视图的边缘.当DrawerLayout拖动时,我将x轴上的视图转换为最小子项(DrawerLayout内容视图)减去阴影(如果有)的量.由于阴影铸造+内容视图DrawerLayout给出了整个抽屉的完整测量宽度.

我快速乘以滑动偏移和最小子,找到x平移.

[编辑:代码已被移除以提高可读性,并且已移至下面提供的链接]

在您的活动中:

mDrawerToggle = new DrawerLayoutEdgeToggle(
    this, 
    mDrawerLayout, 
    R.drawable.ic_launcher, 
    R.drawable.ic_launcher,
    Gravity.LEFT, 
    true) {

        @Override
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view); //must call super
        }

        @Override
        public void onDrawerOpened(View view) {
            super.onDrawerOpened(view); //must call super
        }

        @Override
        public void onDrawerSlide(View view, float slideOffset) {
            super.onDrawerSlide(view, slideOffset); //must call super

        }
    };
mDrawerLayout.setDrawerListener(mDrawerToggle);
Run Code Online (Sandbox Code Playgroud)

创造力提升: 您可以添加更多的化妆品,例如ActionBar的距离,您可以将其设置为手柄的边距.

您也可以通过在Y轴上平移向左/向右上/下移动手柄来模仿"单拉链效果".:)

编辑:它可以在我的GitHub上找到

编辑2:对于那些无法获得句柄的人,只需使用即可mDrawerToggle.setVerticalPostionOffset(0)


Arm*_*ier 6

由于Mobistry编写的Aniqroid库(SO伪),我找到了一种很容易做到这一点的方法

我使用SlidingTray类,它是android SlidingDrawer的副本,但允许您将抽屉定位到屏幕的任何角落.

我通过xml声明了元素

<com.sileria.android.view.SlidingTray 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="270dp"
    android:content="@+id/content"
    android:handle="@+id/handle" >

    <ImageView
        android:id="@+id/handle"
        android:layout_width="320dp"
        android:layout_height="24dp"
        android:background="@drawable/tray_btn" />

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="fill_vertical"
        android:orientation="vertical" >
    </LinearLayout>

</com.sileria.android.view.SlidingTray>
Run Code Online (Sandbox Code Playgroud)

而且只需要打电话

Kit.init(this);
Run Code Online (Sandbox Code Playgroud)

Activity膨胀布局之前在我的主要部分.

我感谢aniqroid开发者!

https://code.google.com/p/aniqroid/