2016-06-27 52 views
1

我试图在切换选项卡时更改tabLayout选项卡中图标的颜色。我正在使用setCustomView(view)来设置像这样的图标。Android:在tabLayout上更改选项卡中的自定​​义视图更改选项卡

View view = inflater.inflate(R.layout.layout_icon, null); 
    view.findViewById(R.id.icon).setBackgroundResource(R.drawable.apple); 

    TabLayout tabLayout = (TabLayout) rootView.findViewById(R.id.tab_layout); 
    tabLayout.addTab(tabLayout.newTab().setCustomView(view)); 

当选中标签时,我想改变它的图标颜色,但我不知道该怎么做。如果我简单地在setCustomView(view)的标签上再次出现onTabSelected这两个图标出现在不同颜色的选项卡中,即原始customView不会被删除。我如何删除自定义视图?或者实现这个目标的方法是什么?有人可以请帮助。提前致谢 !!

+0

您是否尝试过使用选择器? –

+0

@GokhanArik那是什么,你能指点我一些源? – varunkr

+0

你可以看看这个链接http://stackoverflow.com/questions/32611885/changing-the-background-color-of-a-tab-in-tablayout-android-design-support-libr检查这是你想要什么:) –

回答

2

如果你有两个不同的颜色,你可以做到这一点。

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/tab_background_selected" android:state_selected="true" /> 
    <item android:drawable="@drawable/tab_background_unselected" android:state_selected="false" android:state_focused="false" android:state_pressed="false" /> 
</selector> 
+0

在哪里我可以使用这个选择器文件 –

+0

已经很长时间,因为我回答了这个问题,据我记得它是'tab.setIcon(R .drawable.my_selector)' –

+0

我想改变tab选项上的标签选项不是图标 –

4

刚刚解决了这个问题。您需要在您的CustomView中获得对ImageView的引用。然后我设置/取消在OnTabSelectedListener颜色如下:

@Override 
public void onTabSelected(TabLayout.Tab tab) 
{ 
    int tabIconColor = ContextCompat.getColor(getContext(), R.color.colorAccent); 
    ImageView imageView = (ImageView)tab.getCustomView().findViewById(R.id.tab_icon); 
    imageView.getBackground().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN); 
} 

@Override 
public void onTabUnselected(TabLayout.Tab tab) 
{ 
    int tabIconColor = ContextCompat.getColor(getContext(), R.color.white_color); 
    ImageView imageView = (ImageView)tab.getCustomView().findViewById(R.id.tab_icon); 
    imageView.getBackground().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN); 
} 
+0

但getCustomView()方法是私人的你如何从外部访问它? – abmussani

+0

getCustomView()在TabLayout.java支持库(25.1.1)中是公共的 –

0

一个忠告所有。

我花了很多时间在这个问题上,我希望这可以帮助别人了:

TabLayout.Tab.setCustomView(View)通过增加自定义视图更多的参考,而不是作品,顾名思义的方法,通过设置单引用一个自定义视图。

你会认为如果你调用这个方法两次,第一个引用将被第二个引用覆盖。但是,它会将另一个视图添加到刚刚位于旧视图之上的选项卡上。你将无法看到它,因为该标签不够高,但它在那里。

这个方法应该更恰当地命名为TabLayout.Tab.addCustomView(View)

使用此布局自定义视图时,请记住这一点。如果由于某种原因最终调用该方法两次,当您致电tab.getCustomView().findViewById(id)时,您将收到与您期望的参考不同的参考。

相关问题