Change image on Tab in TabLayout when Selected

后端 未结 3 1173
北荒
北荒 2021-01-05 02:11

I am using Design TabLayout,



        
相关标签:
3条回答
  • 2021-01-05 02:49

    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

    0 讨论(0)
  • 2021-01-05 03:09

    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>
    
    0 讨论(0)
  • 2021-01-05 03:10
        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) {
    
            }
        });
    
    0 讨论(0)
提交回复
热议问题