首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ViewPager2更改TabLayout selected选项卡图标

如何使用ViewPager2更改TabLayout selected选项卡图标
EN

Stack Overflow用户
提问于 2019-12-19 08:39:31
回答 3查看 2K关注 0票数 2

我使用FragmentStateAdapterViewPager2com.google.android.material.tabs.TabLayout,要设置选项卡图标,我使用com.google.android.material.tabs.TabLayoutMediator

代码语言:javascript
复制
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() 

但是如何更改所选选项卡的图标?

我试过了,但是mViewPagerViewPager2而不是ViewPager,代码不能编译。

代码语言:javascript
复制
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);
         }
      }
);
EN

回答 3

Stack Overflow用户

发布于 2019-12-19 09:19:26

这个回调函数告诉我所选标签的位置

代码语言:javascript
复制
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

代码语言:javascript
复制
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) {

    }

})
票数 1
EN

Stack Overflow用户

发布于 2019-12-19 09:00:33

您可以在您的布局中添加app:tabIconColorTint -XML:

代码语言:javascript
复制
<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>
票数 0
EN

Stack Overflow用户

发布于 2020-07-12 20:50:41

TabLayout.setOnTabSelectedListener()和TabLayout.BaseOnTabSelectedListener已弃用。改用这个。

代码语言:javascript
复制
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) {
    }
});

另外,如果你只想改变标签图标的色调。请考虑使用此选项,而不是设置滤色器:

代码语言:javascript
复制
final int color = ContextCompat.getColor(context, R.color.myColor);
DrawableCompat.setTint(tab.getIcon(), color);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59401888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档