Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change image on Tab in TabLayout when Selected

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?

like image 368
Pankaj Avatar asked Sep 16 '15 11:09

Pankaj


People also ask

How do you change the typeface of a selected tab of a TabLayout?

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.

What is TabLayout Android studio?

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.


1 Answers

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 enter image description here

like image 92
Biskrem Muhammad Avatar answered Oct 02 '22 20:10

Biskrem Muhammad