I am using Design TabLayout,
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabBackground="@color/ColorPrimary"
app:tabIndicatorColor="@color/orange"
app:tabIndicatorHeight="3dp"
/>
I have added customview to Tabs
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null">
<ImageView
android:id="@+id/imgTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tab_image"
android:layout_centerHorizontal="true"
android:focusable="true"
android:focusableInTouchMode="true"/>
<TextView
android:id="@+id/tabTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/imgTab"
android:text="Home"
android:background="@null"
android:layout_centerHorizontal="true"
android:textColor="@color/selector_tab_text"/>
</RelativeLayout>
tab.setCustomView(view);
I want to change image in the custom view when Tab is Selected. Tried using Selector on imageview it does not work. I cannot get view assigned to Tab in runtime, it only contains setCustomView methode. How to achieve it?
You can change the font family for selected/unselected tab only programmatically. You can listen which Tab is selected and unselected with TabLayout. OnTabSelectedListener and on onTabSelected(TabLayout. Tab tab) callback you can change the Typeface for the selected Tab and on onTabUnselected(TabLayout.
TabLayout is used to implement horizontal tabs. TabLayout is released by Android after the deprecation of ActionBar. TabListener (API level 21). TabLayout is introduced in design support library to implement tabs.
add the setOnTabSelectedListener
to the tabLayout
object
i named mine
navigation
navigation.setOnTabSelectedListener(
new TabLayout.ViewPagerOnTabSelectedListener(mainView) {
@Override
public void onTabSelected(TabLayout.Tab tab) {
super.onTabSelected(tab);
// 1. get the custom View you've added
View tabView = tab.getCustomView();
// get inflated children Views the icon and the label by their id
TextView tab_label = (TextView) tabView.findViewById(R.id.nav_label);
ImageView tab_icon = (ImageView) tabView.findViewById(R.id.nav_icon);
// change the label color, by getting the color resource value
tab_label.setTextColor(getResources().getColor(R.color.active_color));
// change the image Resource
// i defined all icons in an array ordered in order of tabs appearances
// call tab.getPosition() to get active tab index.
tab_icon.setImageResource(navIconsActive[tab.getPosition()]);
}
// do as the above the opposite way to reset tab when state is changed
// as it not the active one any more
@Override
public void onTabUnselected(TabLayout.Tab tab) {
super.onTabUnselected(tab);
View tabView = tab.getCustomView();
TextView tab_label = (TextView) tabView.findViewById(R.id.nav_label);
ImageView tab_icon = (ImageView) tabView.findViewById(R.id.nav_icon);
// back to the black color
tab_label.setTextColor(getResources().getColor(R.color.dark_grey));
// and the icon resouce to the old black image
// also via array that holds the icon resources in order
// and get the one of this tab's position
tab_icon.setImageResource(navIcons[tab.getPosition()]);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
super.onTabReselected(tab);
}
}
);
that will do the job perfectly , and you can pad yourself in the back as i did myself :D
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With