Android 如何实现具有可见句柄的抽屉布局
我已成功为我的应用程序实现了NavigationDrawer 我的应用程序在屏幕左侧显示一个打开的抽屉 我的问题是我需要在左边添加一个按钮。点击或滑动该按钮可打开左侧抽屉。我能做到 但是按钮应该看起来像抽屉的一部分,会溢出到屏幕中 这意味着当抽屉打开和关闭时,按钮应该同时滑动 关闭状态: 打开状态 我试着将按钮添加到左侧抽屉的布局中,但似乎无法使内容显示在其边界之外,并且当您关闭抽屉时,它将始终完全隐藏 现在我正在尝试添加它,以便在主抽屉布局中添加一个按钮,并使其与左抽屉的右侧对齐。。。但是没有运气。。。看起来抽屉里最多只能有两个孩子 任何帮助都将不胜感激 我正在使用支持库(v4) [编辑] 我支持API级别8。。。所以不能使用Android 如何实现具有可见句柄的抽屉布局,android,android-layout,navigation-drawer,drawerlayout,Android,Android Layout,Navigation Drawer,Drawerlayout,我已成功为我的应用程序实现了NavigationDrawer 我的应用程序在屏幕左侧显示一个打开的抽屉 我的问题是我需要在左边添加一个按钮。点击或滑动该按钮可打开左侧抽屉。我能做到 但是按钮应该看起来像抽屉的一部分,会溢出到屏幕中 这意味着当抽屉打开和关闭时,按钮应该同时滑动 关闭状态: 打开状态 我试着将按钮添加到左侧抽屉的布局中,但似乎无法使内容显示在其边界之外,并且当您关闭抽屉时,它将始终完全隐藏 现在我正在尝试添加它,以便在主抽屉布局中添加一个按钮,并使其与左抽屉的右侧对齐。。。但是
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);