Как: разрешить ViewPager нормально функционировать при передаче сенсорных событий представлению ViewPager перекрывается
У меня есть 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 прокручивается в достаточном количестве.
Проблема в двух словах: как разрешить TabLayout, который перекрывается ViewPager, получать события касания, которые ViewPager перехватывает до TabLayout, при этом позволяя ViewPager функционировать должным образом?
заранее спасибо
Редактировать:
Вот базовое XML-представление Activity:
<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>
Примечание: я сделал так, чтобы страницы ViewPager находились ниже TabLayout, установив верхнее поле фрагментов TabLayout так, чтобы они отображались ниже TabLayout.
Вот базовая схема действия перед представлениями (функция для отображения других полноэкранных представлений). onClick
) внутри ViewPager развернуты
И вот базовая диаграмма моей Активности после того, как в пейджере щелкнул вид на другой контент:
Вы можете видеть на второй диаграмме, что TabLayout покрыт содержимым ViewPager.