如何使用选择器使用新的TabLayout更改图标

时间:2015-06-22 09:35:03

标签: android material-design android-support-design

我正在使用Android的新支持TabLayout。问题是我想在选择标签时使用选择器来更改图标。

我一直在查看源代码,在我看来,它永远不会改变视图的状态(因此我无法使用选择器)。

有谁知道一些解决方法?

谢谢!

5 个答案:

答案 0 :(得分:53)

假设你的my_selector.xml是,

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/icon_on" android:state_selected="true"/>
    <item android:drawable="@drawable/icon_off"/> <!-- default -->
</selector>

然后你可以直接调用setIcon,

tab.setIcon(R.drawable.my_selector);

使用&com; .android.support验证:设计:22.2.0&#39;。

答案 1 :(得分:1)

我发现当我第一次为TabLayout中的每个标签设置自定义视图时,我需要将第一个(索引0)设置为选中。

    TabLayout toolbarTabLayout = (TabLayout) findViewById(R.id.tabs);
    toolbarTabLayout.setupWithViewPager(mViewPager);
    toolbarTabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    toolbarTabLayout.setTabMode(TabLayout.MODE_FIXED);
    toolbarTabLayout.setTabTextColors(R.color.colorPrimary, R.color.white);
    // Iterate over all tabs and set the custom view
    for (int i = 0; i < toolbarTabLayout.getTabCount(); i++) {
        TabLayout.Tab tab = toolbarTabLayout.getTabAt(i);
        View v=mSectionsPagerAdapter.getTabView(i);
        // no tabs are actually selected at start, this will make sure the
        // selector for the colors comes in right when initialized
        if (i==0)
            v.setSelected(true);
        tab.setCustomView(v);
    }

这似乎强制在应用自定义视图时选择第一个选项卡。它真的像一个黑客,希望其他人会找出真正的问题,并提出一个更好的解决方案。

答案 2 :(得分:0)

可以使用setCustomView(View view)方法将customView设置为标签。因此,您可以创建文本视图并为其设置选择器,并将此视图设置为选项卡。

希望它可以帮到你!

答案 3 :(得分:0)

如果你做的一切都是正确的(而且我相信这一点),那么你到达的地点与我相同。也许这是新的Android appcompat库中的一个小错误。

我找到了一个解决方法(它在一个好的葡萄牙语中称为Gambiarra)来解决这个问题。你需要从Tab类调用方法select(),如下所示:

mTabLayout.getTabAt(x).select();

但它非常重要:x变量必须与当前选定的标签索引不同。

答案 4 :(得分:0)

这对我有用:

假设您在drawable res文件夹中设置了选择器(如上面显示的Xingang Huang)。 在MainActivity(设置TabLayout的位置)中,包含图标选择器数组,然后像这样循环遍历:

for (int i = 0; i < yourTabLayout.getTabCount(); i++) {
        ImageView imageView = new ImageView(this); //your context, in this case MainActivity.class
        imageView.setImageResource(arr_tabIcons[i]); //tabIcons is the array of icons
        if (i==0) {
            imageView.setSelected(true); 
        }
        yourTabLayout.getTabAt(i).setCustomView(imageView);

    }
  

tab.setIcon(R.drawable.icon)

也可以,但在我的情况下,图标看起来很小,所以我不得不使用ImageView的解决方案来填充标签视图。

快乐的编码;)