I am using Design TabLayout,
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
As setOnTabSelectedListener
is deprecated, and there is no new answer, I'll update an updated answer
Should use addOnTabSelectedListener with OnTabSelectedListener
tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabReselected(p0: TabLayout.Tab?) {
}
override fun onTabUnselected(p0: TabLayout.Tab?) {
(p0?.customView?.findViewById(R.id.tab) as TextView).setTextColor(
context!!.resources.getColor(
R.color.v3_tint_tab_unselected_color
)
)
}
override fun onTabSelected(tab: TabLayout.Tab?) {
(tab?.customView?.findViewById(R.id.tab) as TextView).setTextColor(
context!!.resources.getColor(
R.color.v3_tint_tab_selected_color
)
(tab?.customView?.findViewById(R.id.tab_img) as ImageView).setImageResource(R.drawable.custom_image)
//for getting the posiiton if needed you can use
tab.position or tab.getPosition()
)
}
})
Custom tab xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:id="@+id/parent_layout">
<ImageView android:layout_width="@dimen/space_45"
android:layout_height="@dimen/space_45"
android:id="@+id/tab_img"
android:gravity="center"
android:layout_gravity="center"
android:src="@drawable/hill_icon_blue"
/>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tab"
android:gravity="center"
android:layout_gravity="center"
android:text=""
android:textColor="@color/white"
android:textSize="@dimen/text_size_14"
android:fontFamily="@font/roboto_medium"/>
</LinearLayout>
ImageView imageView= (ImageView) findViewById(R.id.your_image_view);
// On tab selected listener
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if (tab.getPosition() == YOUR_TAB_NUMBER)
imageView.setBackground(getDrawable(R.drawable.ic_second_background));
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
if (tab.getPosition() == YOUR_TAB_NUMBER)
imageView.setBackground(getDrawable(R.drawable.ic_first_background));
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});