在Tabbed Activity中切换Tab时更换AppBarLayout内ImageView资源
嘿,我来帮你搞定这个Tab切换时更换AppBar里ImageView的需求!核心思路就是监听Tab的选中状态变化,在切换瞬间更新ImageView的资源,下面是具体的实现步骤和代码示例:
实现思路与代码示例
1. 先拿到控件的引用
在你的Activity或者对应的Fragment里,先获取TabLayout和目标ImageView的实例:
// 以Activity为例 TabLayout tabLayout = findViewById(R.id.tabLayout); // 替换成你自己的TabLayout ID ImageView appBarImg = findViewById(R.id.appBarImg);
2. 给TabLayout加选中监听器
通过OnTabSelectedListener来监听Tab的切换动作,在选中新Tab的回调里,根据Tab的位置或者标识来切换图片:
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { // 根据选中Tab的位置来匹配对应的图片 switch(tab.getPosition()){ case 0: // 切换到第一个Tab时,设置ImageView的src appBarImg.setImageResource(R.drawable.tab1_header); // 如果需要设置背景的话,用这个:appBarImg.setBackgroundResource(R.drawable.tab1_bg); break; case 1: appBarImg.setImageResource(R.drawable.tab2_header); break; case 2: appBarImg.setImageResource(R.drawable.tab3_header); break; // 有更多Tab的话,继续添加对应的case即可 } } @Override public void onTabUnselected(TabLayout.Tab tab) { // 这个回调是Tab取消选中时触发,一般不需要额外操作,留空就行 } @Override public void onTabReselected(TabLayout.Tab tab) { // 这个是Tab被重复选中时触发,比如可以加个刷新当前Tab内容的逻辑,按需使用 } });
3. 别忘了设置初始默认图片
在Activity启动的时候,给ImageView设置第一个Tab对应的默认图片,避免一开始显示空白:
// 在onCreate方法里 appBarImg.setImageResource(R.drawable.tab1_header);
额外小提示
如果你是用ViewPager/ViewPager2和TabLayout绑定的,也可以监听ViewPager的页面切换事件来实现同样的效果,代码示例如下:
// ViewPager2的监听示例 viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageSelected(int position) { super.onPageSelected(position); // 和之前的逻辑一样,根据position切换图片 switch(position){ case 0: appBarImg.setImageResource(R.drawable.tab1_header); break; // ... 其他case } } });
另外要注意区分setImageResource()(对应XML里的src属性,设置前景图)和setBackgroundResource()(设置背景图),根据你的布局需求选对应的方法就好~
内容的提问来源于stack exchange,提问作者Mohammad Aamir
相关产品推荐
相关产品推荐

