我正在使用Android的新支持TabLayout。问题是我想在选择标签时使用选择器来更改图标。
我一直在查看源代码,在我看来,它永远不会改变视图的状态(因此我无法使用选择器)。
有谁知道一些解决方法?
谢谢!
答案 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的解决方案来填充标签视图。
快乐的编码;)