Android Studio: установить цветовой оттенок на значке в элементе TabItem

Я использую TabLayout для моего меню с иконками кнопок. Можно ли подкрашивать иконки через XML в рисовалках?

android: оттенок не работает с элементом TabItem.

3 ответа

Решение

Вы можете сделать это часть кода, попробуйте это

private void setupTabIcons() {
    tabLayout.getTabAt(0).setIcon(tabIcons[0]);
    tabLayout.getTabAt(1).setIcon(tabIcons[1]);
    tabLayout.getTabAt(2).setIcon(tabIcons[2]);
    tabLayout.getTabAt(3).setIcon(tabIcons[3]);

    tabLayout.getTabAt(0).getIcon().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN);
    tabLayout.getTabAt(1).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
    tabLayout.getTabAt(2).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
    tabLayout.getTabAt(3).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);


    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            tab.getIcon().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN);

        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            tab.getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
        }

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

        }
    });
}

Если вы хотите установить оттенок через XML, есть один способ. Это пользовательский макет для TabItem который устанавливается через атрибут android:layout:

<android.support.design.widget.TabItem
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:icon="@drawable/ic_drawable"
        android:layout="@layout/custom_tab" />

куда custom_tab макет это:

<?xml version="1.0" encoding="utf-8"?>
<com.view.TintableImageView 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@android:id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        app:tint_color="@color/red" />

Источник TintableImageView Вы можете найти здесь.

Этот подход дает вам гибкость, если вы хотите использовать разные цвета значков для разных состояний селектора, просто создайте файл селектора цвета и установите его как оттенок, и он работает

app:tint_color="@color/selector_tab"

Я нашел гораздо более простое решение, в файле макета добавьте этот атрибут в TabLayout:

      app:tabIconTint="@color/desired_color_or_selector"

если вы хотите сохранить состояние цвета (включить/отключить/выбрано), дайте ему селектор цвета следующим образом:

      <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorPrimary" android:state_selected="true" />
    <item android:color="@color/colorPrimary" android:state_focused="true" />
    <item android:color="@color/enabled_color" android:state_enabled="true" />
    <item android:color="@color/disabled_color" />
</selector>
Другие вопросы по тегам