android - 如何使用 ViewPager2 更改 TabLayout 选定的选项卡图标
问题描述
我使用FragmentStateAdapter
,ViewPager2
和com.google.android.material.tabs.TabLayout
, 来设置标签图标,我使用com.google.android.material.tabs.TabLayoutMediator
TabLayoutMediator(
mTabActivity.tabLayout,
mTabActivity.viewPager,
TabLayoutMediator.TabConfigurationStrategy { tab, position ->
when (mTabEnums[position]) {
TabType.TAB_CONTACT -> tab.setIcon(R.drawable.ic_tab_contact)
TabType.TAB_GROUPS -> tab.setIcon(R.drawable.ic_tab_groups)
TabType.TAB_MESSAGES -> tab.setIcon(R.drawable.ic_tab_message)
TabType.TAB_MAPS -> tab.setIcon(R.drawable.ic_tab_map)
TabType.TAB_RECENTS -> tab.setIcon(R.drawable.ic_tab_recent)
TabType.TAB_INCALL_LIST -> tab.setIcon(R.drawable.ic_tab_contact)
TabType.TAB_INCALL_MAPS -> tab.setIcon(R.drawable.ic_tab_map)
}
}
).attach()
但是如何更改选定选项卡的图标?
我试过这个,但mViewPager
不是ViewPager2
a ViewPager
,并且代码无法编译。
mTabLayout.addOnTabSelectedListener(
new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) {
@Override
public void onTabSelected(TabLayout.Tab tab) {
super.onTabSelected(tab);
int tabIconColor = ContextCompat.getColor(
ActivityTab.this, R.color.colorPrimary);
tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
super.onTabUnselected(tab);
int tabIconColor = ContextCompat.getColor(
ActivityTab.this, R.color.colorAccent);
tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
super.onTabReselected(tab);
}
}
);
解决方案
这个回调给了我所选标签的位置
mTabLayout.setOnTabSelectedListener(new TabLayout.BaseOnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
Log.d(TAG,"selection "+tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
或在科特林
mTabActivity.tabLayout.addOnTabSelectedListener(object :
TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
when (mTabEnums[tab.position])
{
TabType.TAB_CONTACT -> tab.icon =
ContextCompat.getDrawable(mTabActivity,R.drawable.ic_tab_contact_green)
}
}
override fun onTabUnselected(tab: TabLayout.Tab) {
when (mTabEnums[tab.position])
{
TabType.TAB_CONTACT -> tab.icon =
ContextCompat.getDrawable(mTabActivity,R.drawable.ic_tab_contact)
}
}
override fun onTabReselected(tab: TabLayout.Tab) {
}
})
推荐阅读
- python - 如何将组数映射到熊猫中的另一个数据框
- gatsby - 悬停按钮不显示 URL 预览 - Gatsby
- javascript - 从函数设置 src 时,iframe HTML 标记拒绝连接
- python - 确定对象是字符串还是数据框
- javascript - 将数组转换为对象数组
- swiftui - SwiftUI NavigationLink 错误:未命名的参数 #2 必须在参数“目的地”之前
- c# - Serilog 未登录 MariaDb 数据库
- javascript - Javascript - 无法更改活动元素
- c - 如何使用 ctypes 将多行字符串从 Python 传递到 C?
- python - PyMC3 TypeError:输出必须是 theano 变量或 Out 实例