TabItem放置在布局XML中时如何使用?

TabLayout文档提供了一个直接在TabLayout中嵌套TabItem的示例, TabLayout所示:

     

但它没有给出如何在实践中使用它的例子,TabItem的文档说:

此视图实际上并未添加到TabLayout,它只是一个虚拟对象,允许设置选项卡项的文本,图标和自定义布局。

那么TabItem是什么? 经过广泛的谷歌搜索后,我找不到任何人在XML中定义TabItems的例子。 有没有办法在资源文件中使用TabItem设置选项卡式活动,如上所示?

Solutions Collecting From Web of "TabItem放置在布局XML中时如何使用?"

这似乎是对设计库的一个相对较新的补充,显然是在版本23.2.0中添加的,尽管修订历史中没有提到它。 它的function非常基本,它似乎使用的唯一属性是其文档中给出的三个: texticonlayout

从测试开始,它似乎基本上是一个XML快捷方式,用于创建新的Tab ,并设置其文本,图标和自定义View ,就像通常在代码中一样。 当它说“这个视图实际上没有添加到TabLayout”时,我认为它意味着它不是常规意义上的View ,因为你不能在它上面设置任何types的标准布局属性,比如layout_widthbackground 。 它只是用于使TabLayout为每个TabItem创建一个新的Tab ,并相应地调用setText()setIcon()setCustomView()

例如,要在代码中添加Tab ,我们通常会执行以下操作:

 TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); // Add Tab TabLayout.Tab tab = tabLayout.newTab(); tab.setCustomView(R.layout.tab); tab.setText("Tab 1"); tab.setIcon(R.drawable.ic_launcher); tabLayout.addTab(tab); 

而现在我们可以通过在布局中添加TabItem来替换上述注释之后的所有内容。

    

请注意,自定义View布局的相同要求仍然适用。 也就是说,文本的TextView必须具有系统资源ID @android:id/text1 ,并且图标的ImageView必须具有ID @android:id/icon 。 例如,上面的R.layout.tab

     

快速添加@Mikes非常有用的答案:

Android Studio现在有一个模板,介绍如何在XML布局中使用带TabItem设置的TabLayout 。 使用“新建>活动>选项卡式活动”创建所有需要的文件,然后选择“操作栏选项卡(使用ViewPager)” ,如屏幕截图所示:

在Android Studio中配置选项卡式活动模板

如果你想在没有自定义视图的情况下调整TabItem的外观:使用白色矢量资产作为选项卡android:icon并使用选择器调色它们(根据android:state_selected提供不同的颜色android:state_selected

当前所选选项卡下的行颜色在标签TabLayout上设置为app:tabIndicatorColor TabLayout

我花了一段时间才开始工作,所以完整的步骤变成了一个很长的答案,我不想在这里复制它们。 您可以在以下位置find我更详细的答案,完整代码:

https://stackoverflow.com/a/49603559/414581