我已为可滑动标签设置了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();
}
}
这有效,我可以在两个标签之间滑动,但没有标题。
我想最终得到这样的东西:
对于我如何设置它,我将不胜感激。
答案 0 :(得分:34)
按照评论中的建议查看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";
}
答案 1 :(得分:5)
自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>
最后,将ViewPager
和TabLayout
绑在一起。
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(viewPager);
在我看来,它看起来比PagerTitleStrip
好。 TabLayout
也适用于类似Google Play的标签。如果你想做@ cjayem13所说的自定义(更改标签颜色,文字颜色,选择的颜色等),它很容易实现..有关详细信息,请参阅official docs或CodePath's guide。
答案 2 :(得分:2)
主要歌词是嵌套的viewpager。关于viewpager和title的一个很好的描述性讨论。 https://github.com/codepath/android_guides/wiki/ViewPager-with-FragmentPagerAdapter
答案 3 :(得分:-3)
您不需要自己实现适配器。简单做以下事项:
mPagerAdapter = new PageAdapter(super.getSupportFragmentManager() );
mPagerAdapter.addFragment(Fragment.instantiate(this, "Title that you want");
您的布局缺少PagerTitleStrip,请参阅此Link
ViewPager只是容器。 PagerTitleStrip应包含在ViewPager布局中,即标题。