Android 向ViewPager添加标题
我已经为可切换选项卡设置了一个ViewPager,现在我想在页面顶部添加标题,以指示显示的片段 这是迄今为止的代码: 活动\u main.xmlAndroid 向ViewPager添加标题,android,android-viewpager,Android,Android Viewpager,我已经为可切换选项卡设置了一个ViewPager,现在我想在页面顶部添加标题,以指示显示的片段 这是迄今为止的代码: 活动\u 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:layou
<?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);
}
}
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();
}
}
public类MainActivity扩展了FragmentActivity{
私人寻呼器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
this.initialisePaging();
}
私有void initialisePaging(){
列表片段=新向量();
//在这里添加片段
add(Fragment.instantiate(this,PickerFragment.class.getName());
add(Fragment.instantiate(这个,DisplayFragment.class.getName());
this.mPagerAdapter=新的页面适配器(super.getSupportFragmentManager(),fragments);
ViewPager pager=(ViewPager)super.findViewById(R.id.ViewPager);
pager.setAdapter(this.mPagerAdapter);
}
}
PageAdapter.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);
}
}
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();
}
}
公共类PageAdapter扩展了FragmentPagerAdapter{
私有列表片段;
公共页面适配器(FragmentManager fm,列出片段){
超级(fm);
this.fragments=片段;
}
@凌驾
公共片段getItem(int位置){
返回此.fragments.get(位置);
}
@凌驾
public int getCount(){
返回此.fragments.size();
}
}
这很有效,我可以在两个标签之间滑动,但没有标题
我想以这样的方式结束:
如果您能帮助我设置此适配器,我将不胜感激。您不需要自己实现适配器。简单的做法如下:
mPagerAdapter = new PageAdapter(super.getSupportFragmentManager() );
mPagerAdapter.addFragment(Fragment.instantiate(this, "Title that you want");
而且你的布局缺少PagerTitleStrip,看到这个了吗
ViewPager只是一个容器。PagerTitleStrip应该包含在ViewPager布局中,这就是标题 按照评论中的建议,我看了之后做了以下工作:
mPagerAdapter = new PageAdapter(super.getSupportFragmentManager() );
mPagerAdapter.addFragment(Fragment.instantiate(this, "Title that you want");
我在activity\u 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>
主要功能是嵌套的viewpager。关于viewpager和title的一个很好的描述性讨论。 由于Android支持,您可以使用
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>
在我看来,它看起来比
PagerTitleStrip
更好TabLayout
也适用于类似于Google Play的标签。如果您想像@cjaym13所说的那样进行定制(更改选项卡颜色、文本颜色、所选颜色等),很容易实现。。有关更多详细信息,请参阅或 你想要一个(谷歌它作为一个教程,它很容易设置)。看看你是否想要更花哨的东西。你知道如何改变标题的颜色吗?我想要一个不同的颜色每页,我只知道如何应用的风格,改变所有的颜色。谢谢。@cjaym13我想你可以用“setTabIndicatorColor”。问题是,我不知道如何使用它做其他事情,比如让它看起来像棒棒糖的联系人应用程序:如何更改各个视图的标题?@bluemunch你可以有一个包含所有不同选项卡标题的字符串列表,然后使用titlesList.get(position)
或类似的东西。谢谢,这是更好的视觉出框!