我使用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而不是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);
}
}
);发布于 2019-12-19 09:19:26
这个回调函数告诉我所选标签的位置
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) {
}
});或者用Kotlin
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) {
}
})发布于 2019-12-19 09:00:33
您可以在您的布局中添加app:tabIconColorTint -XML:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?attr/colorOnSurface" android:state_selected="true" />
<item android:alpha="0.60" android:color="?attr/colorOnSurface" />
</selector>发布于 2020-07-12 20:50:41
TabLayout.setOnTabSelectedListener()和TabLayout.BaseOnTabSelectedListener已弃用。改用这个。
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(@NonNull TabLayout.Tab tab) {
// change icon here
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
});另外,如果你只想改变标签图标的色调。请考虑使用此选项,而不是设置滤色器:
final int color = ContextCompat.getColor(context, R.color.myColor);
DrawableCompat.setTint(tab.getIcon(), color);https://stackoverflow.com/questions/59401888
复制相似问题