其他分享
首页 > 其他分享> > android – 选中时在TabLayout中的Tab上更改图像

android – 选中时在TabLayout中的Tab上更改图像

作者:互联网

我正在使用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"
            />

我已经在Tabs中添加了customview

<?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);

我想在选择Tab时在自定义视图中更改图像.
在imageview上使用Selector尝试它不起作用.
我无法在运行时将视图分配给Tab,它只包含setCustomView方法.
怎么实现呢?

解决方法:

将setOnTabSelectedListener添加到tabLayout对象

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);
                }
            }
    );

这将完美地完成工作,你可以像我自己一样在后面垫自己:D
enter image description here

标签:android,android-tabs,android-tablelayout
来源: https://codeday.me/bug/20190516/1116904.html