TabHost в ScrollView, прокрутите до вкладки при выборе - PullRequest
1 голос
/ 24 октября 2011

У меня есть TabHost внутри HorizontalScrollView, который иногда может иметь более 20 вкладок.На каждой вкладке я могу нажать кнопку «Далее», которая указывает TabHost перейти на следующую вкладку.Проблема в том, что я не могу заставить Scrollview прокручивать до выбранной вкладки, если она находится вне экрана.

Может кто-нибудь сказать мне, как это можно сделать?

Ответы [ 3 ]

2 голосов
/ 15 сентября 2014

Вы должны "обернуть" TabWidget в xml в 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 голос
/ 27 декабря 2013

Лучший и более плавный способ сделать это описан здесь: https://stackoverflow.com/a/6131550/2511775

Сделайте это для настройки вкладок:

for (int i = 0; i < count; i++) {
    getTabWidget().getChildAt(i).setFocusableInTouchMode(true);
}
1 голос
/ 17 декабря 2012

получил рабочий раствор:

@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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...