Android 单个页面上的选项卡

Android 单个页面上的选项卡,android,xml,android-viewpager,android-tabs,Android,Xml,Android Viewpager,Android Tabs,我目前正在使用带有PagerTabStrip的ViewPager在设备顶部显示4个选项卡。我所要做的就是将4个选项卡固定在适当的位置并居中,但由于旧方法(使用操作栏选项卡)已被弃用,我想不出如何做到这一点 基本上我有这样的东西: 但是我想让我的4个标签都在同一页上(都可见) 这是我将寻呼机适配器设置为ViewPager的代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(s

我目前正在使用带有
PagerTabStrip
ViewPager
在设备顶部显示4个选项卡。我所要做的就是将4个选项卡固定在适当的位置并居中,但由于旧方法(使用操作栏选项卡)已被弃用,我想不出如何做到这一点

基本上我有这样的东西:

但是我想让我的4个标签都在同一页上(都可见)

这是我将寻呼机适配器设置为
ViewPager
的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    pager = (ViewPager) findViewById(R.id.pager);
    pager.setAdapter(new MainPagerAdapter(getSupportFragmentManager()));

}
这是相关的XML:

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    tools:context=".MainActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.PagerTabStrip
        android:id="@+id/pager_tab_strip"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:background="@color/theme_color"
        android:textColor="#fff"
        android:paddingTop="18dp"
        android:paddingBottom="18dp"/>

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

但我找不到任何可靠的答案。同样的问题。

如果您需要更多信息,请在下面的评论中发布

首先,要将库添加到gradle中的项目中,或者安装库

Gradle添加编译'com.jpardogo.materialtabstrip:library:1.0.9'或在

XML

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/primary"
        android:minHeight="56dp"
        app:theme="@style/ThemeOverlay.AppCompat.Dark"/>


    <com.astuetz.PagerSlidingTabStrip
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_below="@+id/toolbar"
        android:background="@color/primary"
        android:textColorPrimary="@color/white"
        app:pstsDividerColor="@color/primary"
        app:pstsIndicatorColor="@color/white"
        app:pstsIndicatorHeight="2dp"
        app:pstsShouldExpand="true"
        app:pstsUnderlineHeight="0dp"/>

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/tabs"/>

</RelativeLayout>
main活动

public class MainActivity extends AppCompatActivity {
    ViewPager viewPager;
    PagerAdapter pagerAdapter;
    PagerSlidingTabStrip pagerSlidingTabStrip;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager) findViewById(R.id.pager);
        pagerAdapter = new PagerAdapter(getSupportFragmentManager());
        pagerSlidingTabStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        viewPager.setAdapter(pagerAdapter);
        pagerSlidingTabStrip.setViewPager(viewPager);
    }
}

如果你想知道我是如何设计这个应用的,我也会把它贴出来,让我知道

更新
如果你想把阴影放在标签下面,我也可以贴出来

您正在尝试创建这样的“材质设计”选项卡吗?没错。但是我知道怎么做的方法已经被Android L弃用了,所以我很迷茫。我将使用另一个库为您发布代码。我只需要知道您是否使用fragment作为选项卡。谢谢——是的,使用fragment。非常好用!谢谢。@uj-没问题。继续!快速问题:您是否知道是否可以在特定选项卡中嵌套另一个
pagerslidingtastrip
,而不附加
ViewPager
?我想在
PagerSlidingTabStrip
的第一个选项卡下放置两个选项卡,但我不想在它们之间滑动,因为这会干扰第一组选项卡的
ViewPager
。如果你不知道如何使用它,这很酷。你可以在一个viewpager中添加另一个viewpager。只需将viewpager的高度设置为小,这样您就可以在主页之间滑动。如果我将
viewpager的高度设置为小,这不会隐藏它所浏览的片段吗?
public class PagerAdapter extends FragmentPagerAdapter {

    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    private Fragment f = null;

    @Override
    public Fragment getItem(int position) { // Returns Fragment based on position
        switch (position) {
            case 0:
                f = new FragmentPageOne();
                break;
            case 1:
                f = new FragmentPageTwo();
                break;
        }
        return f;
    }

    @Override
    public int getCount() { // Return the number of pages
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) { // Set the tab text
        if (position == 0) {
            return "Fragment One";
        }
        if (position == 1) {
            return "Fragment Two";
        }
        return getPageTitle(position);
    }
}
public class MainActivity extends AppCompatActivity {
    ViewPager viewPager;
    PagerAdapter pagerAdapter;
    PagerSlidingTabStrip pagerSlidingTabStrip;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager) findViewById(R.id.pager);
        pagerAdapter = new PagerAdapter(getSupportFragmentManager());
        pagerSlidingTabStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        viewPager.setAdapter(pagerAdapter);
        pagerSlidingTabStrip.setViewPager(viewPager);
    }
}