NavigationDrawer 和 ViewPager 之间的手势冲突
Gesture conflicts between NavigationDrawer and ViewPager
我有一个 NavigationDrawerActivity
布局如下:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_drawerlayout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/drawer_framelayout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ListView
android:id="@+id/drawer_listview"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@color/transparent"
android:dividerHeight="0dp"
android:background="@color/navigationDrawerBackgroundColor" />
</android.support.v4.widget.DrawerLayout>
FrameLayout
被 Fragment
替换,这是当前从 NavigationDrawer
的 ListView
中选择的项目。
显示效果很好,NavigationDrawer
效果很好,但是当Fragment
包含一个带指标的ViewPager
时,如:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0" />
<me.shkschneider.skeleton.ui.viewpager.ViewPagerCircleIndicator
android:id="@+id/viewpagercircleindicator"
android:layout_width="match_parent"
android:layout_height="@dimen/spaceSmallish" />
</LinearLayout>
当我尝试向后(向左)滑动时,我(主要是)出现了奇怪的行为:ViewPager
内的 View
滑动了一半的距离,然后重置到它的位置,很难滑动到上一个 Fragment
.
我注意到只有当我的手指起点在屏幕左侧(NavigationDrawer
所在的位置)时才会发生这种情况,但是我没有看到任何 NavigationDrawer
移动.
这发生在我的 Nexus 5 运行 Android 5.0.1 和我的 Moto X 运行 Android 4.4.4.
- 这两个 UI 元素真的兼容吗?
- 我是否遗漏了一个
Listener
或一些可以防止这种行为的东西/如何避免它?
我使用 Android 设计库以不同的方式实现了这个,现在这个问题已经消失了。
https://developer.android.com/training/implementing-navigation/nav-drawer.html
我有一个 NavigationDrawerActivity
布局如下:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_drawerlayout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/drawer_framelayout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ListView
android:id="@+id/drawer_listview"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@color/transparent"
android:dividerHeight="0dp"
android:background="@color/navigationDrawerBackgroundColor" />
</android.support.v4.widget.DrawerLayout>
FrameLayout
被 Fragment
替换,这是当前从 NavigationDrawer
的 ListView
中选择的项目。
显示效果很好,NavigationDrawer
效果很好,但是当Fragment
包含一个带指标的ViewPager
时,如:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0" />
<me.shkschneider.skeleton.ui.viewpager.ViewPagerCircleIndicator
android:id="@+id/viewpagercircleindicator"
android:layout_width="match_parent"
android:layout_height="@dimen/spaceSmallish" />
</LinearLayout>
当我尝试向后(向左)滑动时,我(主要是)出现了奇怪的行为:ViewPager
内的 View
滑动了一半的距离,然后重置到它的位置,很难滑动到上一个 Fragment
.
我注意到只有当我的手指起点在屏幕左侧(NavigationDrawer
所在的位置)时才会发生这种情况,但是我没有看到任何 NavigationDrawer
移动.
这发生在我的 Nexus 5 运行 Android 5.0.1 和我的 Moto X 运行 Android 4.4.4.
- 这两个 UI 元素真的兼容吗?
- 我是否遗漏了一个
Listener
或一些可以防止这种行为的东西/如何避免它?
我使用 Android 设计库以不同的方式实现了这个,现在这个问题已经消失了。
https://developer.android.com/training/implementing-navigation/nav-drawer.html