如何使用页面滑动视图创建Android选项卡式样式

如何使用页面滑动视图创建Android选项卡式样式,android,tabs,android-viewpager,sliding,Android,Tabs,Android Viewpager,Sliding,我想要一个这样的选项卡示例 我搜索了一下,但刚找到这个 我无法使用此来源。有人能告诉我另一个带滑动选项的标签的例子吗。 我认为viewpageindicator与google播放标签不同。 因为当我在google plays页面中滚动时,标签下面的行在滚动时会移动,但在viewpageindicator中则不会。 谢谢首先,您需要使用viewpagerandroid.support.v4.view.viewpager创建一个xml布局文件 然后在主要活动中放大此布局,确保活动实现 and

我想要一个这样的选项卡示例

我搜索了一下,但刚找到这个

我无法使用此来源。有人能告诉我另一个带滑动选项的标签的例子吗。
我认为viewpageindicator与google播放标签不同。

因为当我在google plays页面中滚动时,标签下面的行在滚动时会移动,但在viewpageindicator中则不会。


谢谢

首先,您需要使用viewpager
android.support.v4.view.viewpager创建一个xml布局文件

然后在主要活动中放大此布局,确保活动实现

android.support.v7.app.ActionBar.TabListener
假设您想要有4个选项卡,然后创建

4个不同的片段。创建一个公共适配器,以便基于

您选择的选项卡

下面是一个带有代码片段的简单示例

注意:上面的示例与android支持库配合得很好,后者提供了向后的actionbar

android手机早期版本的兼容性

希望能有帮助


谢谢

当我实现了类似的东西时,我用了一种更好的方式,在类的意义上。我在一个名为working的包中创建了适配器

代码如下:

public class TabsPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int index) {

        switch (index) {
        case 0:
          return new WorkingFragment();
        //You can add as many fragments as you wish here by adding the cases and calling the different fragments.
        }      
        return null;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs. 4 is only the number of fragments I had used.
        return 4;
    }
}
然后,在我给出的示例中,您需要创建一个名为
WorkingFragment
的新类。为了干净的编码,我在主包中创建了这个类

下面是片段的代码:

public class NewEventFragment extends Fragment {

    View rootView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //reference the xml file containing the view with all the code here.
    }
}
main活动中
,您需要将功能从一个选项卡更改为另一个选项卡。在我的情况下,我已经把它包含在主包中

以下是MainActivity类的代码:

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

    private ViewPager ViewPager;
    private TabsPagerAdapter SectionsPagerAdapter;
    private ActionBar actionBar;

    //Include the name for the tabs in this array. Make sure the number of elements in this string matches the number of views you will have in your app. 
    private String[] tabs = {};

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

     // Initialisation
        ViewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        SectionsPagerAdapter = new TabsPagerAdapter(getSupportFragmentManager());

        ViewPager.setAdapter(SectionsPagerAdapter);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     // Adding Tabs
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this));
        }

        ViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                // on changing the page
                // make respected tab selected
                actionBar.setSelectedNavigationItem(position);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });
    }

    @Override
    public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {

    }

    @Override
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
        ViewPager.setCurrentItem(tab.getPosition());

    }

    @Override
    public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
    }
} 

希望这能帮助您实现应用程序的必要功能:)

使用片段选项卡的简单方法

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
在创建中,然后

private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new 
        ViewPagerAdapter(getSupportFragmentManager());        
        adapter.addFrag(new RootDetailFragment(), "TAB 1");
        adapter.addFrag(new ShiftDetailFragment(), "TAB 2");        
        viewPager.setAdapter(adapter);
}


class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

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

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

    public void addFrag(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}
private void setupViewPager(ViewPager-ViewPager){
ViewPagerAdapter适配器=新
ViewPagerAdapter(getSupportFragmentManager());
addFrag(新的RootDetailFragment(),“表1”);
addFrag(新的ShiftDetailFragment(),“TAB 2”);
viewPager.setAdapter(适配器);
}
类ViewPagerAdapter扩展了FragmentPagerAdapter{
私有最终列表MFFragmentList=new ArrayList();
私有最终列表MFFragmentTitleList=new ArrayList();
公共视图页面编辑器(碎片管理器){
高级经理;
}
@凌驾
公共片段getItem(int位置){
返回MFFragmentList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}
public void addFrag(片段、字符串标题){
添加(片段);
MFFragmentTitleList.add(标题);
}
@凌驾
公共字符序列getPageTitle(int位置){
返回MFFragmentTitleList.get(位置);
}
}
在布局文件中添加

 <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#000"
        app:tabGravity="fill"
        app:tabMode="fixed" />
</android.support.design.widget.AppBarLayout>


看看这个:@Person为什么你不把Alex Jolig的答案标记为最佳答案看看这个不错的答案,但是投票率最高的答案更清楚。