对于jfeinstein10(https://github.com/jfeinstein10/SlidingMenu)的滑动菜单,我可以在应用中的任意位置滑动以滑动打开菜单。
对于谷歌新推出的导航抽屉http://developer.android.com/design/patterns/navigation-drawer.html#side-nav,我有什么方法可以有类似的行为吗?
到目前为止,从文档中我看到它只限于从边缘滑动或触摸应用程序图标。
用户可以通过滑动将导航抽屉带到屏幕上 从屏幕左边缘或触摸应用程序图标 在行动栏上。
答案 0 :(得分:10)
请参阅http://developer.android.com/design/patterns/navigation-drawer.html
“用户可以通过从屏幕左边缘滑动或触摸操作栏上的应用程序图标将导航抽屉带到屏幕上。”
他们不会在屏幕上的任何位置说或滑动。他们在任何应用程序(G +,Gmail等)中也没有这种功能,所以如果你想要这个功能,你应该坚持自己编写(带手势)或第三方(例如jfeinstein10)。
编辑: Youtube应用程序确实允许你滑动任何地方,但我至少有版本(4.5.17)看起来不像是使用他们的新api。
答案 1 :(得分:10)
我找到了解决方案。您可以配置触摸边距并使其与视图一样宽。这是链接
答案 2 :(得分:5)
您可以使用此
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Field mDragger = mDrawerLayout.getClass().getDeclaredField(
"mLeftDragger");//mRightDragger or mLeftDragger based on Drawer Gravity
mDragger.setAccessible(true);
ViewDragHelper draggerObj = (ViewDragHelper) mDragger
.get(mDrawerLayout);
Field mEdgeSize = draggerObj.getClass().getDeclaredField(
"mEdgeSize");
mEdgeSize.setAccessible(true);
int edge = mEdgeSize.getInt(draggerObj);
mEdgeSize.setInt(draggerObj, edge * 3);
答案 3 :(得分:3)
正如其他人所说,切尼在他的回答中说过 - 最好按照预期保留它。但是,DrawerLayout
与SlidingMenu
的风格不同。谷歌还添加了SlidingPaneLayout
,它更贴近SlidingMenu的风格。
我最终以这种方式实现了SlidingPaneLayout
,因为它更像是我一直在寻找的东西。 (这也是YouTube /环聊应用的风格)
<android.support.v4.widget.SlidingPaneLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sliding_pane_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/left_pane"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
</android.support.v4.widget.SlidingPaneLayout>
然后使用操作栏主页按钮打开:
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action buttons
switch(item.getItemId()) {
case android.R.id.home:
if (mPaneLayout.isOpen())
mPaneLayout.closePane();
else
mPaneLayout.openPane();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
然后,您可以实现PanelSlideListener
来处理它何时滑动/打开/关闭。
我建议在导航抽屉上阅读Adam Powell的系列 - 第3部分介绍SlidingPaneLayout与导航抽屉的使用:
第1部分 - https://plus.google.com/+AdamWPowell/posts/2zi4DXd3jkm
第2部分 - https://plus.google.com/+AdamWPowell/posts/VdgexsZeXHW
第3部分 - https://plus.google.com/+AdamWPowell/posts/8j2GVw72i1E
第4部分 - https://plus.google.com/+AdamWPowell/posts/TtBFUXhe5HU
答案 4 :(得分:2)
您可以使用GestureDetector
自行检测滑动手势,只需使用DrawerLayout.openDrawer()
方法自行打开导航抽屉。