摘要:一简介使用起来就是我们通过创建给它填充多个,左右滑动时,切换不同的。
一、简介
Viewpager使用起来就是我们通过创建adapter给它填充多个view,左右滑动时,切换不同的view。Google官方是建议我们使用Fragment来填充ViewPager的,这样 可以更加方便的生成每个Page,以及管理每个Page的生命周期二、引入相关依赖
implementation "com.android.support:design:28.0.0"三、效果图 四、代码实现
xml
activity中通过id来寻找控件
viewPager = findViewById(R.id.viewPager); tabLayout = findViewById(R.id.tabLayout);
创建ViewPager适配器
public class PageAdapter extends FragmentPagerAdapter { ListfragmentList = new ArrayList<>(); List titleList = new ArrayList<>(); public PageAdapter(FragmentManager fm,List fragmentList,List titleList) { super(fm); this.fragmentList = fragmentList; this.titleList = titleList; } @Override public Fragment getItem(int i) { return fragmentList.get(i); } @Override public int getCount() { return fragmentList.size(); } @Nullable @Override public CharSequence getPageTitle(int position) { return titleList.get(position); } }
准备相关数据(fragment,title)
private ListgetTitleList() { titleList.add("Tab1"); titleList.add("Tab2"); return titleList; } private List getFragmentList() { pageModels.add(new PageModel(R.layout.examplelayout1)); pageModels.add(new PageModel(R.layout.examplelayout2)); for (int i = 0; i < pageModels.size(); i++) { pageFragment = PageFragment.newInstance(pageModels.get(i).exampleLayoutRes); fragmentList.add(pageFragment); } return fragmentList; } class PageModel { @LayoutRes int exampleLayoutRes; public PageModel(@LayoutRes int exampleLayoutRes) { this.exampleLayoutRes = exampleLayoutRes; } }
设置viewPager适配器
viewPager.setAdapter(new PageAdapter(getSupportFragmentManager(), getFragmentList(), getTitleList()));
设置tab标题
如果不设置此项,tab将无法显示
tabLayout.setupWithViewPager(viewPager);五、附上源码
布局相关:
activity_main
fragment_page
examplelayout1
examplelayout2
功能代码
MainActivity
public class MainActivity extends AppCompatActivity { ViewPager viewPager; TabLayout tabLayout; ListtitleList = new ArrayList<>(); List fragmentList = new ArrayList<>(); List pageModels = new ArrayList<>(); PageFragment pageFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); doBisness(); } private void doBisness() { viewPager = findViewById(R.id.viewPager); tabLayout = findViewById(R.id.tabLayout); viewPager.setAdapter(new PageAdapter(getSupportFragmentManager(), getFragmentList(), getTitleList())); tabLayout.setupWithViewPager(viewPager); } private List getTitleList() { titleList.add("Tab1"); titleList.add("Tab2"); return titleList; } private List getFragmentList() { pageModels.add(new PageModel(R.layout.examplelayout1)); pageModels.add(new PageModel(R.layout.examplelayout2)); for (int i = 0; i < pageModels.size(); i++) { pageFragment = PageFragment.newInstance(pageModels.get(i).exampleLayoutRes); fragmentList.add(pageFragment); } return fragmentList; } class PageModel { @LayoutRes int exampleLayoutRes; public PageModel(@LayoutRes int exampleLayoutRes) { this.exampleLayoutRes = exampleLayoutRes; } } }
PageFragment
public class PageFragment extends Fragment { @LayoutRes int exampleLayoutRes; /** * Use this factory method to create a new instance of * this fragment using the provided parameters. */ public static PageFragment newInstance(@LayoutRes int exampleLayoutRes) { PageFragment fragment = new PageFragment(); Bundle args = new Bundle(); args.putInt("exampleLayoutRes", exampleLayoutRes); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { exampleLayoutRes = getArguments().getInt("exampleLayoutRes"); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_page, container, false); ViewStub exampleStub = view.findViewById(R.id.exampleViewStub); exampleStub.setLayoutResource(exampleLayoutRes); exampleStub.inflate(); return view; } }
PageAdapter
public class PageAdapter extends FragmentPagerAdapter { List六、项目github地址fragmentList = new ArrayList<>(); List titleList = new ArrayList<>(); public PageAdapter(FragmentManager fm,List fragmentList,List titleList) { super(fm); this.fragmentList = fragmentList; this.titleList = titleList; } @Override public Fragment getItem(int i) { return fragmentList.get(i); } @Override public int getCount() { return fragmentList.size(); } @Nullable @Override public CharSequence getPageTitle(int position) { return titleList.get(position); } }
https://github.com/fr1014/vie...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72694.html
摘要:开发过程中,特别是新开的项目,底部状态栏的切换使用的频率非常的高,主要的实现方式有这里我先介绍前面两种实现方式,后面两种后期再贴出实现方式。代码地址底部公众号回复底部状态栏切换即可获取。 Android开发过程中,特别是新开的项目,底部状态栏的切换使用的频率非常的高,主要的实现方式有: (1)、TabLayout + Fragment (2)、FragmentTabHo...
摘要:初步实现之前在知乎上看到有人对微信的设计改动将使用频率高的朋友圈消息提醒和公众号这三个功能独立出来放在首页。 1、介绍和准备 我们在使用手机App时不难会看到这样的页面上面是一组起导航作用的标签,点击标签就会切换到相应的页面;在不同的页面中滑动时,标签的样式(文字大小或者颜色)也会发生变化。这样你任何时候都能一眼看出自己停留在哪个页面。这个布局出镜率实在太高了,我甚至敢说每个学Andr...
阅读 3304·2021-09-30 09:54
阅读 3797·2021-09-22 15:01
阅读 3107·2021-08-27 16:19
阅读 2575·2019-08-29 18:39
阅读 2158·2019-08-29 14:09
阅读 628·2019-08-26 10:23
阅读 1339·2019-08-23 12:01
阅读 1867·2019-08-22 13:57