2014-06-28 24 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

它適合我。