首页 > 解决方案 > TabLayout.TabView 和 TabLayout.Tab 有什么区别

问题描述

我试图了解两个类之间的区别,它们都是 TabLayout 类的内部类。在以下链接中:示例

我在示例中看到该方法onTabSelectedd(TabLayout.Tab tab)获取对Tab对象的引用,并且由于我无法理解的原因,它写在那里:

 ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0);
 ViewGroup vgTab = (ViewGroup) vg.getChildAt(tab.getPosition());

Tab对象是否足够?我看到的东西第二行应该返回与Tab相同的对象,它是上述方法的参数。当我为两个对象打印 toString() 时,我看到参数tab是 TabView 的实例,vgTabTab 的实例有人 能解释一下我的误解吗?

标签: androidandroid-tablayoutandroid-tabs

解决方案


TabLayout.Tab不是 的子类ViewTabLayout它是一个“概念”选项卡,一个对象包含在(文本、图标等)中呈现单个选项卡所需的所有信息。

TabLayout.TabView是 的子类View。它知道如何获取Tab并渲染其文本、图标等。

在您链接的问题和答案中,代码如下的原因:

ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0);
ViewGroup vgTab = (ViewGroup) vg.getChildAt(tab.getPosition());

是该onTabSelected()方法只接收 type 的参数Tab,但需要做与视图相关的事情(更改文本大小),所以它必须接受它Tab并“找到”与之对应的对应项TabView

代码假设 的第一个孩子tabLayout将成为选项卡视图的容器,然后在该容器中查找与参数选项卡相同位置的视图。然后它扫描该视图的所有子视图,并更改TextView它找到的任何子视图的文本大小。


推荐阅读