ScrollView中的TabHost,选中后滚动到选项卡

时间:2011-10-24 12:54:41

标签: android tabs scroll android-tabhost horizontalscrollview

我在Horizo​​ntalScrollView中有一个TabHost,有时可以有超过20个标签。在每个标签活动中,我可以按下“下一步”按钮,指示TabHost移动到下一个标签。问题是,如果Scrollview不在屏幕上,我无法滚动到选定的选项卡。

有人可以告诉我这是怎么做到的吗?

3 个答案:

答案 0 :(得分:2)

你必须将xml中的T​​abWidget“包装”到Horizo​​ntalScrollView:

...

    <HorizontalScrollView android:layout_width="fill_parent"
                          android:layout_height="wrap_content"
                          android:fillViewport="true"
                          android:scrollbars="none"
                          android:id="@+id/tabsHorizontalScrollView">

        <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0"/>
    </HorizontalScrollView>

...

并设置为TabHost TabHost.OnTabChangeListener

@Override
public void onTabChanged(final String tag) {
    View tabView = tabHost.getCurrentTabView();
    int scrollPos = tabView.getLeft() - (tabsHorizontalScrollView.getWidth() - tabView.getWidth()) / 2;
    tabsHorizontalScrollView.smoothScrollTo(scrollPos, 0);
}

答案 1 :(得分:1)

得到了一个有效的解决方案:

@Override
public void onTabChanged(final String tag) {
    final int pos = this.mTabHost.getCurrentTab();
    final View tabView = mTabHost.getTabWidget().getChildTabViewAt(pos);
    final int[] locationOnScreen= new int[2];
    tabView.getLocationOnScreen(locationOnScreen);
    mtabsHorizontalScrollView.scrollTo(locationOnScreen[0], 0);
}

答案 2 :(得分:1)

此处描述了更好,更顺畅的方法:https://stackoverflow.com/a/6131550/2511775

在设置标签时执行以下操作:

for (int i = 0; i < count; i++) {
    getTabWidget().getChildAt(i).setFocusableInTouchMode(true);
}