包含在Horizo​​ntalScrollView中的TabWidget不会使用ViewPager滚动

我不得不使用TabHost代替ActionBarTabs并使它们可滚动我将TabWidget包装在HorizontalScrollView ,但HorizontalScrollView不会根据ViewPager滚动自身。 我尝试过几种不同的方式使用scrollTo和fullScroll,但它没有改变任何东西。 我需要做些什么才能使其正常工作?

         

  @Override public void onTabChanged(String tabId) { int position = mTabHost.getCurrentTab(); mViewPager.setCurrentItem(position); mHorizontalScrollView.scrollTo(position, 0); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { mHorizontalScrollView.scrollTo(position, 0); } 

在调用.scrollTo(x,y)方法后调用.refreshDrawableState()时,水平滚动视图将更改。

另外需要注意的是.scrollTo(x,y)滚动使得x位于屏幕的左侧。 您可能需要使用选项卡的坐标和水平滚动视图的宽度进行一些数学计算以正确定位。 你不能调用.scrollTo(position,0)并让它以你想要的方式工作(除非你的标签是1像素宽)。

ViewPager具有滚动行为的大脑。

我会从你的布局中删除Horizo​​ntalScrollView。 其余的看起来很好。

然后我会检查这个谷歌提供的代码示例,我基于你想要完成的ViewPager接口: http : //developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app /FragmentTabsPager.html

您会注意到,除了设置要滚动到的页面之外,您在上面声明的相应方法与滚动没有任何关系。 ViewPager在内部处理平滑滚动。

  @Override public void onTabChanged(String tabId) { int position = mTabHost.getCurrentTab(); mViewPager.setCurrentItem(position); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }