【问题标题】:Adding titles to ViewPager向 ViewPager 添加标题
【发布时间】:2012-12-29 14:58:19
【问题描述】:

我已经为可滑动标签设置了 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();
    }
}

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

我想最终得到这样的东西:

对于如何设置它的任何帮助,我将不胜感激。

【问题讨论】:

标签: android android-viewpager


【解决方案1】:

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

我在 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";
}

【讨论】:

  • 知道如何改变标题的颜色吗?我想要每页不同的颜色,我只知道如何应用改变所有颜色的样式。谢谢。
  • @cjayem13 我认为您可以使用“setTabIndicatorColor”。问题是,我不知道如何用它做其他事情,比如让它看起来像棒棒糖的联系人应用程序:stackoverflow.com/q/27621425/878126
  • 如何更改各个视图的标题?
  • @bluemunch 你可以有一个包含所有不同标签标题的字符串列表,然后使用titlesList.get(position) 或类似的东西。
【解决方案2】:

由于Android支持Design library 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>

最后,将ViewPagerTabLayout 绑定在一起。

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

在我看来,它看起来比PagerTitleStrip 更好。 TabLayout 也适用于类似 Google Play 的标签。如果您想像@cjayem13 所说的那样进行自定义(更改选项卡颜色、文本颜色、选定颜色等),这很容易实现。请参阅official docsCodePath's guide 了解更多详细信息。

【讨论】:

  • 谢谢,开箱即用的视觉效果更好!
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    您不需要自己实现适配器。简单的做以下:

    mPagerAdapter  = new PageAdapter(super.getSupportFragmentManager() );
    
    mPagerAdapter.addFragment(Fragment.instantiate(this, "Title that you want");
    

    而您的布局缺少 PagerTitleStrip,请参阅Link

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      相关资源
      最近更新 更多