我已成功为我的应用程序实现了NavigationDrawer。
我的应用程序显示在屏幕左侧打开的抽屉。
我的问题是我需要在左边添加一个按钮。可以单击或滑动该按钮以打开左侧抽屉。我能做到。
但是按钮应该看起来像它是抽屉里的一部分,会溢出到屏幕上。
这意味着当抽屉打开和关闭时,按钮应同时滑动。
已关闭状态:
开放状态
我尝试将按钮添加到左侧抽屉的布局中,但似乎您无法将内容显示在其边界之外,并且当您关闭抽屉时,抽屉将始终完全隐藏。
现在我正在尝试添加它以向主DrawerLayout添加一个按钮并使其对齐到左抽屉的右侧...但是没有运气......看起来DrawerLayout不能超过两个孩子...
任何帮助将不胜感激。
我正在使用支持库(v4)
[编辑]
我支持API级别8 ...因此无法使用ImageView.setTranslationX
或View.OnAttachStateChangeListener
答案 0 :(得分:12)
这很棘手。
我认为这与新版谷歌地图应用中的抽屉手柄相似。不要相信我的话,不确定。 :)
我写的切换位于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);
创造力增强: 您可以添加更多的化妆品,例如ActionBar的距离,您可以将其设置为手柄的边距。
您也可以通过在Y轴上平移向左/向右移动手柄来模仿“单拉链效果”。 :)
修改:我的GitHub here
可以使用 编辑2 :对于那些无法获得句柄的人,请使用mDrawerToggle.setVerticalPostionOffset(0)
答案 1 :(得分: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>
只需打电话
Kit.init(this);
在膨胀布局之前,在我的主Activity
中。
我感谢aniqroid开发者!