自定义viewpager条

时间:2014-08-21 07:17:20

标签: android android-viewpager

android是否提供了自定义标准PageTitleStrip或PageTabStrip的机会? 我想创建这样的标题?我应该扩展什么样的观点,也许这个领域有一些最佳实践?

enter image description here

2 个答案:

答案 0 :(得分:3)

只需创建自己的自定义视图,通过调用ViewPager.setOnPageChangeListener将其连接到您的视图寻呼机,瞧 - 您有自己的页面条。

您可以查看ViewPagerIndicator和PageTitleStrip本身的来源(Android源代码可免费获取),以了解如何详细实现此内容

答案 1 :(得分:1)

这可能有点晚了但我终于找到了解决我如何自定义titletrip问题的方法。我意识到这不是一种非常干净的自定义标题的方式,但我无法在任何地方找到更好的解决方案。我希望它能为你们节省一些时间。

首先创建一个扩展PagerTitleStrip的新类,并使用两个参数覆盖构造函数:

public class MyPagerTitleStrip extends PagerTitleStrip {

    public MyPagerTitleStrip(Context context, AttributeSet attrs) {
        super(context, attrs);
        ((ViewManager) (this.getChildAt(2)).getParent()).removeView((TextView)this.getChildAt(2));
        ((ViewManager) (this.getChildAt(0)).getParent()).removeView((TextView)this.getChildAt(0));
    }

}

正如你所看到的,我以一种hacky的方式从titlestrip中删除了两个textview,所以对此感到厌倦。这两个文本视图分别显示上一个和下一个项目的标题。

您可能想要做一些与我不同的事情,因此在更改/破解任何内容之前,请仔细查看android PagerTitleStrip类,尤其是构造函数。构造函数可能是您要添加drawables等的地方。 在protected void onLayout()方法中更改视图可能会导致视图被绘制两次,这对应用程序的性能不是很好(您在日志中会看到很多警告)。

在xml中,一切都是一样的:

<android.support.v4.view.ViewPager

        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:id="@+id/main_fragment_pager"
        xmlns:android="http://schemas.android.com/apk/res/android">

        <com.package.MyPagerTitleStrip
            android:id="@+id/fragment_pager_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:paddingTop="4dp"
            android:paddingBottom="4dp"
            android:background="#111111"
            style="@style/viewPagerTitleStrip">
        </com.package.MyPagerTitleStrip>

</android.support.v4.view.ViewPager>