我想要一个像这样的选项卡示例:
我尝试搜索,但只得到了这个。
我无法使用这个资源。有人可以告诉我另一个带有滑动选项的选项卡示例吗?
我认为viewpageindicator与谷歌Play选项卡不同。
因为当我在谷歌Play页面上滚动时,选项卡下方的线条会随着滚动而移动,但在viewpageindicator中不会。
谢谢
我想要一个像这样的选项卡示例:
我尝试搜索,但只得到了这个。
我无法使用这个资源。有人可以告诉我另一个带有滑动选项的选项卡示例吗?
我认为viewpageindicator与谷歌Play选项卡不同。
因为当我在谷歌Play页面上滚动时,选项卡下方的线条会随着滚动而移动,但在viewpageindicator中不会。
谢谢
首先,您需要使用viewpager android.support.v4.view.ViewPager
创建一个xml布局文件。
然后在主活动中填充此布局,确保您的活动实现了
android.support.v7.app.ActionBar.TabListener
。假设您想要有4个选项卡,则创建
4个不同的片段。创建一个通用适配器来根据所选的选项卡方便这些片段。
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);
}
}
<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>
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.
}
}
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) {
}
}