
android之ViewPager2和底部菜单栏的实现
发布日期:2021-05-10 15:54:52
浏览次数:21
分类:精选文章
本文共 4937 字,大约阅读时间需要 16 分钟。
������ViewPager2���������������������������
���������������������
���build.gradle���������������������
implementation 'androidx.viewpager2:viewpager2:1.0.0'
������XML ������������
1. activity_main.xml
2. bottom_tab.xml
���������������������������������������
1. ������������������������������
���drawable���������������tab_selected
���tab_unselected
���������������������������������������������������������������������
���������������������selector���
2. ������������������
���drawable���������������tab_selected
���tab_unselected
������������������
���������������������selector���
������������ViewPager2������������
1. FragmentAdapter
public class MyFragmentAdapter extends FragmentStateAdapter { private final Listlist; public MyFragmentAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle, @NonNull List list) { super(fragmentManager, lifecycle); this.list = list; } @NonNull @Override public Fragment createFragment(int position) { return list.get(position); } @Override public int getItemCount() { return list.size(); }}
2. MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ViewPager2 viewPager; private LinearLayout tab1, tab2, tab3, tab4; private ImageView tab1_iv, tab2_iv, tab3_iv, tab4_iv; private TextView tab1_tv, tab2_tv, tab3_tv, tab4_tv; private ImageView current_iv; private TextView current_tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initPager(); initView(); } private void initView() { tab1 = findViewById(R.id.tab1); tab2 = findViewById(R.id.tab2); tab3 = findViewById(R.id.tab3); tab4 = findViewById(R.id.tab4); tab1_iv = findViewById(R.id.tab1_iv); tab2_iv = findViewById(R.id.tab2_iv); tab3_iv = findViewById(R.id.tab3_iv); tab4_iv = findViewById(R.id.tab4_iv); tab1_tv = findViewById(R.id.tab1_tv); tab2_tv = findViewById(R.id.tab2_tv); tab3_tv = findViewById(R.id.tab3_tv); tab4_tv = findViewById(R.id.tab4_tv); tab1_iv.setSelected(true); current_iv = tab1_iv; tab1_tv.setSelected(true); current_tv = tab1_tv; tab1.setOnClickListener(this); tab2.setOnClickListener(this); tab3.setOnClickListener(this); tab4.setOnClickListener(this); } private void initPager() { viewPager = findViewById(R.id.vp_container); viewPager.setAdapter(new MyFragmentAdapter(getSupportFragmentManager(), getLifecycle(), list)); viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageSelected(int position) { super.onPageSelected(position); handlePageChange(position); } }); } private void handlePageChange(int position) { current_iv.setActivated(false); current_tv.setActivated(false); switch (position) { case 0: tab1_iv.setActivated(true); current_iv = tab1_iv; tab1_tv.setActivated(true); current_tv = tab1_tv; break; case 1: tab2_iv.setActivated(true); current_iv = tab2_iv; tab2_tv.setActivated(true); current_tv = tab2_tv; break; case 2: tab3_iv.setActivated(true); current_iv = tab3_iv; tab3_tv.setActivated(true); current_tv = tab3_tv; break; case 3: tab4_iv.setActivated(true); current_iv = tab4_iv; tab4_tv.setActivated(true); current_tv = tab4_tv; break; } } @Override public void onClick(View v) { handlePageChange(v.getId()); switch (v.getId()) { case R.id.tab1: viewPager.setCurrentItem(0, false); break; case R.id.tab2: viewPager.setCurrentItem(1, false); break; case R.id.tab3: viewPager.setCurrentItem(2, false); break; case R.id.tab4: viewPager.setCurrentItem(3, false); break; } }}
������������������
������������������������������������������������������������������������������ViewPager2��������������������������� tabs, ������������������������������������������������
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月29日 18时54分52秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C#实现outlook自动签名
2021-05-09
MySQL 5.5 My.cnf 模版
2021-05-09
使用mysqladmin ext了解MySQL运行状态【转】
2021-05-09
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
2021-05-09
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2021-05-09
[Unity][EXE]封装打包后怎么Debug错误显示output_log.txt
2021-05-09
使用promise封装wx:requset()
2021-05-09
图文追踪PlusToken资产转移行踪(一): BTC部分有1,203个流入交易所
2021-05-09
stm32h743iit6 cubmex 配置QSPI w25128模式问题
2021-05-09
让nginx支持文件上传的几种模式
2021-05-09
LeetCode 637 二叉树的层平均值-简单
2021-05-09
Redis-day2-五种数据结构类型与数据持久化AOF+RDB
2021-05-10
IOS开发Swift笔记16-错误处理
2021-05-10
Java 天气预报WebService
2021-05-10
redis中RDB和AOF的区别
2021-05-10
《STM32从零开始学习历程》——CAN相关结构体
2021-05-10
Tomcat中jdk版本与项目版本不一致造成404错误以及Eclipse修改jdk版本
2021-05-10
配置SpringMVC中的视图解析器
2021-05-10
杭电OJ-2034(C)
2021-05-10