15

我已经为可滑动标签设置了 ViewPager,现在我想在页面顶部添加标题以指示正在显示的片段。

这是到目前为止的代码:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+android:id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

MainActivity.java

public class MainActivity extends FragmentActivity {

    private PagerAdapter mPagerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.activity_main);

        this.initialisePaging();
    }

    private void initialisePaging() {

        List<Fragment> fragments = new Vector<Fragment>();

        // Add fragments here
        fragments.add(Fragment.instantiate(this, PickerFragment.class.getName()));
        fragments.add(Fragment.instantiate(this, DisplayFragment.class.getName()));

        this.mPagerAdapter  = new PageAdapter(super.getSupportFragmentManager(), fragments);
        ViewPager pager = (ViewPager)super.findViewById(R.id.viewpager);
        pager.setAdapter(this.mPagerAdapter);
    }

}

PageAdapter.java

public class PageAdapter extends FragmentPagerAdapter {

    private List<Fragment> fragments;

    public PageAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return this.fragments.get(position);
    }

    @Override
    public int getCount() {
        return this.fragments.size();
    }
}

这可行,我可以在两个标签之间滑动,但没有标题。

我想最终得到如下所示的东西:

谷歌播放

对于如何设置它,我将不胜感激。

4

4 回答 4

35

在查看PagerTitleStrip之后,按照评论中的建议,我做了以下事情:

我在activity_main.xml添加了一个PagerTitleStrip

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+android:id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <android.support.v4.view.PagerTitleStrip
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top" />
    </android.support.v4.view.ViewPager>

</LinearLayout>

然后在PageAdapter.java我添加了以下方法:

@Override
public CharSequence getPageTitle(int position) {
    return "Title Here";
}
于 2012-12-29T15:22:48.397 回答
7

由于 Android 支持设计库 22.2.0,您可以使用TabLayout类。它与 非常相似PagerTitleStrip,您只需要在 ViewPagerAdapter 上指定标题。

@Override
public CharSequence getPageTitle(int position) {
    return titleList.get(position);
}

并将其添加到您的 xml 中的任何位置。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.design.widget.TabLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

最后,把你的ViewPagerand绑TabLayout在一起。

TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(viewPager);

在我看来,它看起来比PagerTitleStrip. TabLayout也适用于类似 Google Play 的标签。如果您想像@cjayem13 所说的那样进行自定义(更改选项卡颜色、文本颜色、选定颜色等),这很容易实现。有关更多详细信息,请参阅官方文档CodePath 指南

于 2017-02-01T06:01:02.037 回答
2

主要的技巧是嵌套的viewpager。关于viewpager和标题的一个很好的描述性讨论。 https://github.com/codepath/android_guides/wiki/ViewPager-with-FragmentPagerAdapter

于 2015-04-21T18:51:31.747 回答
-3

您不需要自己实现适配器。简单地执行以下操作:

mPagerAdapter  = new PageAdapter(super.getSupportFragmentManager() );

mPagerAdapter.addFragment(Fragment.instantiate(this, "Title that you want");

而且您的布局缺少 PagerTitleStrip,请参阅此链接

ViewPager 只是容器。PagerTitleStrip 应该包含在 ViewPager 布局中,这就是标题。

于 2012-12-29T15:15:07.133 回答