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>