Android 在TableLayout中,如何修改SwiperFreshLayout的滑动行为
我在SwiperFreshLayout中使用了android.support.design.widget.TabLayout,我注意到如果我的水平滑动有任何轻微的向下变化,SwiperFreshLayout将在水平寻呼机滑动之前处理。由于这个原因,目前很难滑动浏览页面 我想修改SwipperFresh,使其仅在滑动更垂直时响应,以便水平滑动更容易。或者有更好的方法来解决这个问题 这是我的示例应用程序的activity_main.xmlAndroid 在TableLayout中,如何修改SwiperFreshLayout的滑动行为,android,android-support-library,Android,Android Support Library,我在SwiperFreshLayout中使用了android.support.design.widget.TabLayout,我注意到如果我的水平滑动有任何轻微的向下变化,SwiperFreshLayout将在水平寻呼机滑动之前处理。由于这个原因,目前很难滑动浏览页面 我想修改SwipperFresh,使其仅在滑动更垂直时响应,以便水平滑动更容易。或者有更好的方法来解决这个问题 这是我的示例应用程序的activity_main.xml <android.support.v4.widget.
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tabLayout"/>
</RelativeLayout>
我用滚动解决了我的问题,但还有其他一些小问题需要考虑。通过在正确的时间禁用SwiperFreshLayout,可以很容易地使ViewPager和SwipreRefreshLayout更好地工作 基本上,如果您收听ViewPager的OnScrollChange事件,您就知道用户何时启动ViewPager滚动,并且在滚动完成时将获得滚动状态空闲。当状态不是空闲时,我可以在SwiperFreshLayout上使用setEnable(false)禁用刷新。这阻止了刷新接管 如果ViewPagers页面的内容不滚动,这将正常工作。但如果他们这样做了,你就会遇到另一个问题。向下滚动视图以到达顶部将被SwipeRefreshLayout覆盖,您只能向下滚动 我解决这个新问题的方法是禁用SwipeRefreshLayout,除非ScrollView位于顶部。根据可滚动视图的不同,确定顶部会有所不同,因此我不包含任何代码 SwipeRefreshLayout的放置也会影响此操作的正确性。如果您在ViewPager中的视图之外有它,并且一个页面的滚动视图是“在顶部”,并且您滑动到另一个页面,则必须检查新视图是否也在顶部。我在同一个ViewPager.OnPageChaneListener.onPageScrollStateChaned中这样做了
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTabLayout = (TabLayout) findViewById(R.id.tabLayout);
mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
mViewPager = (ViewPager) findViewById(R.id.viewPager);
mOnPageChangeListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float v, int i1) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setEnabled(state == ViewPager.SCROLL_STATE_IDLE);
}
}
};
mViewPager.addOnPageChangeListener(mOnPageChangeListener);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mSectionsPagerAdapter);
mTabLayout.setupWithViewPager(mViewPager);
mSwipeRefreshLayout.setOnRefreshListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mViewPager != null) {
mViewPager.removeOnPageChangeListener(mOnPageChangeListener);
}
}
我还没有发现任何其他应用程序在SwipreRefreshLayout中使用TabLayout,所以可能是“不要那样做”的情况。但是在玩Play Store应用程序时,你只能看到滚动视图的滚动指示器与水平滑动指示器的对比,当滑动大约为45%时。我很想复制这种行为。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTabLayout = (TabLayout) findViewById(R.id.tabLayout);
mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
mViewPager = (ViewPager) findViewById(R.id.viewPager);
mOnPageChangeListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float v, int i1) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setEnabled(state == ViewPager.SCROLL_STATE_IDLE);
}
}
};
mViewPager.addOnPageChangeListener(mOnPageChangeListener);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mSectionsPagerAdapter);
mTabLayout.setupWithViewPager(mViewPager);
mSwipeRefreshLayout.setOnRefreshListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mViewPager != null) {
mViewPager.removeOnPageChangeListener(mOnPageChangeListener);
}
}