Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何实现具有可见句柄的抽屉布局_Android_Android Layout_Navigation Drawer_Drawerlayout - Fatal编程技术网

Android 如何实现具有可见句柄的抽屉布局

Android 如何实现具有可见句柄的抽屉布局,android,android-layout,navigation-drawer,drawerlayout,Android,Android Layout,Navigation Drawer,Drawerlayout,我已成功为我的应用程序实现了NavigationDrawer 我的应用程序在屏幕左侧显示一个打开的抽屉 我的问题是我需要在左边添加一个按钮。点击或滑动该按钮可打开左侧抽屉。我能做到 但是按钮应该看起来像抽屉的一部分,会溢出到屏幕中 这意味着当抽屉打开和关闭时,按钮应该同时滑动 关闭状态: 打开状态 我试着将按钮添加到左侧抽屉的布局中,但似乎无法使内容显示在其边界之外,并且当您关闭抽屉时,它将始终完全隐藏 现在我正在尝试添加它,以便在主抽屉布局中添加一个按钮,并使其与左抽屉的右侧对齐。。。但是

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

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

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

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

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

关闭状态:

打开状态

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

现在我正在尝试添加它,以便在主抽屉布局中添加一个按钮,并使其与左抽屉的右侧对齐。。。但是没有运气。。。看起来抽屉里最多只能有两个孩子

任何帮助都将不胜感激

我正在使用支持库(v4)

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

这是相当棘手的

我认为这与谷歌地图新应用程序中抽屉把手的操作类似。不要相信我的话,我不确定

我编写了一个切换,它位于
活动
内容视图的边缘。 当拖动
DrawerLayout
时,我在x轴上平移视图的量是最小子视图(即
DrawerLayout
content视图)减去阴影(如果有的话)。因为
抽屉布局的阴影投射+内容视图给出了整个抽屉的完整测量宽度

我快速乘以滑动偏移和最小子对象,然后找到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);
创造力提升: 您可以添加更多的化妆品,如距离ActionBar,您可以将其设置为手柄的边距

您还可以通过在Y轴上平移,沿左/右上/下移动手柄来模拟“单拉链效果”。)

编辑:可在我的


编辑2:对于那些无法获得开始时出现的句柄的用户,只需使用
mDrawerToggle.setVerticalPostionOffset(0)

多亏了Mobistry编写的Aniqroid库(非常伪),我找到了一种非常简单的方法

我使用SlidingRay类,它是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>
在我的主
活动
中,在展开布局之前

我感谢aniqroid开发人员


非常感谢。我不确定我是否能适应您的解决方案,因为我需要支持API级别8,正如我在编辑中所写的那样。有什么想法吗?我会试试看。@ArmelLarcier我一直在为旧版本提供支持,但无法使它与您的库一起正常工作,句柄没有显示,但当触摸屏幕的某些部分时(抽屉通常打开的左侧附近没有),抽屉似乎突然出现。我也不想使用slidingDrawer,因为我觉得这个小部件太慢了。最后,仅使用NineoladDroids库,我就能够通过在抽屉旁边放置另一个视图,并以抽屉移动的速度设置x值的动画来实现所需的结果。这与库的功能基本相同。当您不设置手柄的垂直位置时,可能有一种奇怪的行为。我有时间的时候会修好的。对于那些经历过这种情况的人,只需使用
setverticalpositionoffset(0)
您可以添加一些示例活动吗?把处理器的图标放在哪里?我在尝试集成这个库时遇到了很多错误。你有什么解决方案吗?我自己(接受的)答案是我选择的解决方案。
Kit.init(this);