TabWidget, завернутый в HorizontalScrollView, не прокручивается с ViewPager - PullRequest
4 голосов
/ 11 марта 2012

Мне нужно использовать TabHost вместо ActionBarTabs и чтобы они могли прокручиваться, я завернул свой TabWidget в HorizontalScrollView, но HorizontalScrollView не прокручивается самв соответствии с ViewPager.Я пытался использовать scrollTo и fullScroll несколькими способами, но это ничего не меняет.Что мне нужно сделать, чтобы это работало правильно?

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <HorizontalScrollView
        android:id="@id/horizontalScrollView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fillViewport="true"
        android:scrollbars="@null" >

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" />
    </HorizontalScrollView>

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="0" />

    <android.support.v4.view.ViewPager
        android:id="@id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

</LinearLayout>

        @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);
    }

Ответы [ 2 ]

5 голосов
/ 13 марта 2012

Вид горизонтальной прокрутки изменится, когда вы вызовете .refreshDrawableState() после вызова метода .scrollTo(x,y).

Еще одна вещь, на которую следует обратить внимание, это то, что .scrollTo(x,y) прокручивается так, что x располагается в левой части экрана.Возможно, вам придется поработать с координатами ваших вкладок и шириной горизонтальной прокрутки, чтобы правильно расположить объекты.Вы не можете позвонить .scrollTo(position,0) и заставить его работать так, как вам нравится (если только ваши вкладки не имеют ширину в 1 пиксель).

0 голосов
/ 11 марта 2012

У ViewPager есть мозги для прокрутки.

Я бы удалил HorizontalScrollView из вашего макета. В остальном выглядит хорошо.

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