首页 > 解决方案 > 如何更改 TabLayout Android 的图标颜色

问题描述

我的班级有 3 个片段,如果我只想更改所选选项卡的图标颜色,我正在使用 TabLayout,该怎么做。顺便说一下,下面是我的代码示例。运行时获取值为 NULL 的错误代码

    TextView tabPendapatan = (TextView) LayoutInflater.from(requireContext()).inflate(R.layout.custom_tab, null);
    tabPendapatan.setText(getResources().getString(R.string.tab_perkiraan_pendapatan));
    tabPendapatan.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.ic_tab_pendapatan, 0, 0);
    content.tabLayout.getTabAt(0).setCustomView(tabPendapatan);

    TextView tabRiwayat = (TextView) LayoutInflater.from(requireContext()).inflate(R.layout.custom_tab, null);
    tabRiwayat.setText(getResources().getString(R.string.tab_riwayat_transaksi));
    tabRiwayat.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.ic_tab_riwayat, 0, 0);
    content.tabLayout.getTabAt(1).setCustomView(tabRiwayat);

    TextView tabMutasi = (TextView) LayoutInflater.from(requireContext()).inflate(R.layout.custom_tab, null);
    tabMutasi.setText(getResources().getString(R.string.tab_mutasi_rekening));
    tabMutasi.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.ic_tab_mutasi, 0, 0);
    content.tabLayout.getTabAt(2).setCustomView(tabMutasi);


    content.tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(content.viewPager) {
        @SuppressLint("ResourceType")
        @Override
        public void onTabSelected(TabLayout.Tab tab) {

            int tabIconActive = ContextCompat.getColor(requireContext(), R.color.tab_riwayat_aktif);
            int tabIconInactive = ContextCompat.getColor(requireContext(), R.color.tab_riwayat_nonaktif);

            
            switch (tab.getPosition()){
                case 0:
                    tab.getIcon().setColorFilter(tabIconActive, PorterDuff.Mode.SRC_IN);
                    content.tabLayout.getTabAt(1).getIcon().setColorFilter(tabIconInactive, PorterDuff.Mode.SRC_IN);
                    content.tabLayout.getTabAt(2).getIcon().setColorFilter(tabIconInactive, PorterDuff.Mode.SRC_IN);
                    break;
                case 1:
                    tab.getIcon().setColorFilter(tabIconActive, PorterDuff.Mode.SRC_IN);
                    content.tabLayout.getTabAt(2).getIcon().setColorFilter(tabIconInactive, PorterDuff.Mode.SRC_IN);
                    content.tabLayout.getTabAt(0).getIcon().setColorFilter(tabIconInactive, PorterDuff.Mode.SRC_IN);
                    break;
                case 3:
                    tab.getIcon().setColorFilter(tabIconActive, PorterDuff.Mode.SRC_IN);
                    content.tabLayout.getTabAt(0).getIcon().setColorFilter(tabIconInactive, PorterDuff.Mode.SRC_IN);
                    content.tabLayout.getTabAt(1).getIcon().setColorFilter(tabIconInactive, PorterDuff.Mode.SRC_IN);
                    break;

        }
        @SuppressLint("ResourceType")
        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

我真的很感谢你所有的答案

标签: javaandroidandroid-tablayout

解决方案


在可绘制文件夹中创建 tab_background.xml 搜索文件。在此代码文件中,您可以更改所选选项卡的颜色。

/drawable/tab_background.xml


推荐阅读