2

当每个选项卡都处于state_selected模式时,我需要为每个选项卡使用自定义背景。但是当我选择一个选项卡时仍然没有任何反应。

我像这样使用选择器:(tab_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true"
         android:drawable="@drawable/gradient_tab" />
    <item android:state_selected="false" 
        android:drawable="@drawable/tab_unselected" />
    <item android:drawable="@drawable/tab_unselected"/>
</selector>

这是activity_main.xml

<com.astuetz.PagerSlidingTabStrip
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="48dip"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@drawable/tab_back"
    app1:pstsTabBackground="@drawable/tab_selector"
    app1:pstsIndicatorColor="#00FFFFFF"
    app1:pstsShouldExpand="true" />

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/tabs"
    tools:context=".MainActivity" />

很明显,我正在使用astuetz的 PagerSlidingTabStrip。以下是我使用 ViewPager 和 PagerSlidingTabStrip 的方式:

final PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setAdapter(mainPagerAdapter);
tabs.setTextColor(Color.WHITE);
tabs.setViewPager(viewPager);

    viewPager.setOnPageChangeListener(new OnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
        tabs.setViewPager(viewPager);
    }

我尝试混合不同的状态并重新定位它们,但仍然无法正常工作。我试图在选定的模式上放置一个特定的选项卡,但我无法弄清楚。

4

3 回答 3

3

我自己弄清楚了,但不是以标准方式!因为我需要在我选择的选项卡上使用类似背景的渐变,所以我使用了这样的指示器和下划线:

<com.astuetz.PagerSlidingTabStrip
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="48dip"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@drawable/tab_back"
    app1:pstsUnderlineHeight="24dip"
    app1:pstsIndicatorHeight="48dip"
    app1:pstsIndicatorColor="#e7e7e7"
    app1:pstsShouldExpand="true" />
于 2014-06-30T16:03:20.043 回答
1

仅适用于那些在不使用分叉的 PageSliding 选项卡条的情况下寻找答案的人。

对于选择器问题,您可以使用 CustomOnPageChangeListener 在 tabStrip 上设置 OnPageChangeListener,并将 tabStrip 内的按钮的 selected_state 设置为“true”

这是我的 CustomOnPageChangeListener

private class CustomOnPageChangeListenner implements ViewPager.OnPageChangeListener{

    private PagerSlidingTabStrip tabStrip;
    private int previousPage=0;
    //Constructor initiate with TapStrip
    //
    public CustomOnPageChangeListenner(PagerSlidingTabStrip tab){
        tabStrip=tab;
        //Set the first image button in tabStrip to selected,
        ((LinearLayout)tabStrip.getChildAt(0)).getChildAt(0).setSelected(true);
    }
    @Override
    public void onPageScrolled(int i, float v, int i2) {

    }

    @Override
    public void onPageSelected(int i) {
        //set the previous selected page to state_selected = false
        ((LinearLayout)tabStrip.getChildAt(0)).getChildAt(previousPage).setSelected(false);
        //set the selected page to state_selected = true
        ((LinearLayout)tabStrip.getChildAt(0)).getChildAt(i).setSelected(true);
        //remember the current page
        previousPage=i;
    }

    @Override
    public void onPageScrollStateChanged(int i) {

    }
}

然后将此自定义侦听器设置为您的标签条

PagerSlidingTabStrip tabStrip;
tabStrip.setOnPageChangeListener(new CustomOnPageChangeListenner(tabStrip));
于 2014-09-14T05:09:10.367 回答
1

我打电话PagerSlidingTabStrip.setOnPageChangeListener 而不是viewPager.setOnPageChangeListener

这个对我有用。

于 2015-06-24T08:28:34.540 回答