我有一个 TabLayout 和一个包含选项卡的 ViewPager。
ViewPager 位于 TabLayout 上方,因此 ViewPager 与 TabLayout 重叠,因此,在不同选项卡之间导航的 TabLayout 按钮不起作用,因为 ViewPager 正在拦截触摸事件。
我试图通过调用requestDisallowInterceptTouchEvent(true)
ViewPager 来解决这个问题,但它没有解决这个问题。
我还创建了一个自定义 ViewPager 并覆盖了 onTouchEvent() 方法,如下所示:
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (ev.getActionMasked() != MotionEvent.ACTION_MOVE) {
return false;
}
else {
return super.onTouchEvent(ev);
}
}
这允许 TabLayout 选项卡按钮接收触摸事件,但当 ViewPager 滚动足够多时,ViewPager 不会自动滚动到不同的片段。
简而言之,问题是:如何允许 ViewPager 重叠的 TabLayout 接收 ViewPager 在 TabLayout 之前拦截的触摸事件,同时允许 ViewPager 正常运行?
提前致谢
编辑:
这是 Activity 的基本 XML 表示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Activity"
>
<include
android:id="@+id/toolbar"
layout="@layout/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:elevation="50dp"
/>
<android.support.design.widget.TabLayout
android:layout_marginTop="?actionBarSize"
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:layout_gravity="bottom"
app:tabMode="fixed"
android:background="@color/purple_light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:tabMaxWidth="0dp"
app:tabGravity="fill"
android:clickable="true"
/>
<CustomViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewPager"
android:layout_below="@+id/toolbar_layout"
android:clickable="false"
/>
</RelativeLayout>
注意:我通过将 TabLayout 片段的上边距设置为足以让它们显示在 TabLayout 下方,从而使 ViewPager 页面看起来位于 TabLayout 下方
onClick
这是ViewPager 内的视图(用于显示其他全屏视图的功能)展开之前的 Activity 基本图
这是在寻呼机中单击视图显示其他内容后我的 Activity 的基本图:
您可以在第二张图中看到 TabLayout 被 ViewPager 内容覆盖