android - 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 的实例,而vgTab是Tab 的实例有人 能解释一下我的误解吗?
解决方案
TabLayout.Tab
不是 的子类View
。TabLayout
它是一个“概念”选项卡,一个对象包含在(文本、图标等)中呈现单个选项卡所需的所有信息。
TabLayout.TabView
是 的子类View
。它知道如何获取Tab
并渲染其文本、图标等。
在您链接的问题和答案中,代码如下的原因:
ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0); ViewGroup vgTab = (ViewGroup) vg.getChildAt(tab.getPosition());
是该onTabSelected()
方法只接收 type 的参数Tab
,但需要做与视图相关的事情(更改文本大小),所以它必须接受它Tab
并“找到”与之对应的对应项TabView
。
代码假设 的第一个孩子tabLayout
将成为选项卡视图的容器,然后在该容器中查找与参数选项卡相同位置的视图。然后它扫描该视图的所有子视图,并更改TextView
它找到的任何子视图的文本大小。
推荐阅读
- python - 如何计算列表的最小不公平和
- swift - 尝试运行我的 ios 应用程序时,@rpath image not Found 错误
- flutter - Flutter - 添加 GridView 而不指定容器高度
- windows - 为什么 windows 不加载 WINUSB 驱动程序?
- google-apps-script - GmailApp getAliases 不包括帐户的主要电子邮件地址
- python - 我可以在没有 YOLO 等深度学习检测的情况下使用 DeepSORT 吗?
- android - 通过从分页 2 迁移到分页 3 得到重复的类错误
- photoshop - 从 Photoshop 图层获取图层 ID
- c# - 在 Xamarin 中,我是否应该担心在滚动视图中显示大量内容?
- python - 如何查询币安保证金账户的唯一符号余额?