var*_*nkr 1 android android-tablayout
切换标签时,我尝试更改tabLayout的标签中图标的颜色。我setCustomView(view)用来设置像这样的图标。
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));
Run Code Online (Sandbox Code Playgroud)
选择选项卡后,我想更改其图标的颜色,但是我不知道该怎么做。如果我只是setCustomView(view)再次在选项卡上将onTabSelected两个图标分别用不同的颜色显示在选项卡内,则原始的customView不会被删除。如何删除自定义视图?或实现此目标的方法是什么?有人可以帮忙吗?提前致谢 !!
请大家注意。
我在这个问题上花了很多时间,希望这对某人有帮助:
该方法TabLayout.Tab.setCustomView(View)通过向自定义视图添加更多引用来工作,而不是顾名思义,是为一个自定义视图设置单个引用。
您可能会认为,如果两次调用此方法,则第一个引用将被第二个引用覆盖。但是,相反,它将在旧选项卡上方的选项卡上附加另一个视图。您将无法看到它,因为该标签不够高,但它在那里。
该方法将更恰当地命名 TabLayout.Tab.addCustomView(View)
在此布局中使用自定义视图时,请记住这一点。如果由于某种原因最终两次调用该方法,则在调用时tab.getCustomView().findViewById(id)您将收到与期望的引用不同的引用。
刚刚解决了这个问题。您需要在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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5521 次 |
| 最近记录: |