【问题标题】:Android:ViewPager - PagerSlidingTabStrip, Custom Tab Background on state_selectedAndroid:ViewPager - PagerSlidingTabStrip,state_selected 上的自定义标签背景
【发布时间】:2014-06-28 20:10:16
【问题描述】:

当每个选项卡都处于 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 by 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);
    }

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

【问题讨论】:

    标签: android android-viewpager pagerslidingtabstrip


    【解决方案1】:

    我自己想通了,但不是以标准方式! 由于我需要在我选择的选项卡上使用类似背景的渐变,因此我使用了这样的指示符和下划线:

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

    【讨论】:

    • 嘿,我也想做,但不明白 app1 是什么??
    • 你可以使用它来自定义这个库的属性。几周前我使用过这个,但我认为有多个元素,你应该使用 app2、app3 等等。 PagerSlidingTabStrip-Customization
    • @FarzadDev,你知道如何在每个选项卡中放置不同的可绘制对象吗?用于使用选项卡选择器文件的 xml 自定义 pstsTabBackground 将仅使用一个图像。无法弄清楚如何在我的 4 个选项卡上获得 4 个不同的可绘制对象。谢谢,如果你知道。
    【解决方案2】:

    仅适用于那些在不使用分叉的 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));
    

    【讨论】:

    • 你的剪断不起作用兄弟。 NPE in ((LinearLayout)tabStrip.getChildAt(0)).getChildAt(0)
    【解决方案3】:

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

    它对我有用。

    【讨论】:

      猜你喜欢
      • 2022-07-04
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 2019-11-28
      相关资源
      最近更新 更多