我在HorizontalScrollView中有一个TabHost,有时可以有超过20个标签。在每个标签活动中,我可以按下“下一步”按钮,指示TabHost移动到下一个标签。问题是,如果Scrollview不在屏幕上,我无法滚动到选定的选项卡。
有人可以告诉我这是怎么做到的吗?
答案 0 :(得分:2)
你必须将xml中的TabWidget“包装”到HorizontalScrollView:
...
<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);
}