2014-06-28 26 views
2

我需要为每个选项卡使用自定义背景,当它们中的每一个都处于state_selected模式时。但是,当我选择一个标签时仍然没有任何反应Android:ViewPager - PagerSlidingTabStrip,自定义选项卡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" /> 

由于我使用的是PagerSlidingTabStrip通过astuetz明显。 这里是我如何使用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); 
    } 

我试着混合不同的状态和重新定位他们,但仍然没有工作。 我试图把一个特定的选项卡放在选定的模式,但我无法弄清楚。

回答

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" /> 
+0

嘿,我想要做的一样,但不明白什么是app1? – Manishika

+0

您可以使用它来自定义该库的属性。我在几个星期前使用了这个功能,但我认为有多个元素,您应该使用app2,app3等等。 [PagerSlidingTabStrip-Customization](https://github.com/astuetz/PagerSlidingTabStrip#customization) – FarzadDev

+0

好主意!谢谢,我也使用它... –

1
只是为那些谁不使用叉形PageSliding标签条寻找答案

的选择问题,你可以设置OnPageChangeListener上有CustomOnPageChangeListener标签栏,并设置内部标签栏按钮“真”

这里selected_state是我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)); 
+0

你的剪裁不起作用兄弟。 NPE in((LinearLayout)tabStrip.getChildAt(0))。getChildAt(0) –

1

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

它适合我。