TabLayout
documentation提供了一个直接在TabItem
内嵌套TabLayout
的示例,如下所示:
<android.support.design.widget.TabLayout
android:layout_height="wrap_content"
android:layout_width="match_parent">
<android.support.design.widget.TabItem
android:text="@string/tab_text"/>
<android.support.design.widget.TabItem
android:icon="@drawable/ic_android"/>
</android.support.design.widget.TabLayout>
但它没有给出如何在实践中使用它的例子,并且TabItem的文档说:
此视图实际上并未添加到TabLayout,它只是一个虚拟对象,允许设置标签项的文本,图标和自定义布局。
那么TabItem
是什么?经过广泛的谷歌搜索后,我找不到任何人在XML中定义TabItems的例子。有没有办法在资源文件中使用TabItem设置选项卡式活动,如上所示?
答案 0 :(得分:32)
这似乎是对设计库的一个相对较新的补充,显然是在版本23.2.0中添加的,尽管the revision history中没有提到它。它的功能非常基本,它似乎使用的唯一属性是docs中给出的三个:text
,icon
和layout
。< / p>
从测试开始,它似乎基本上是一个XML快捷方式,用于创建新的Tab
,并设置其文本,图标和自定义View
,就像通常在代码中一样。当它说&#34;这个视图实际上没有被添加到TabLayout&#34;,我相信这意味着它不是常规意义上的View
,因为你无法在其上设置任何类型的标准布局属性,例如layout_width
或background
。它只会导致TabLayout
为每个Tab
创建一个新的TabItem
,并相应地调用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
来替换上述评论后的所有内容。
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TabItem
android:layout="@layout/tab"
android:text="Tab 1"
android:icon="@drawable/ic_launcher" />
</android.support.design.widget.TabLayout>
请注意,自定义View
布局的相同要求仍然适用。也就是说,文本的TextView
必须具有系统资源ID @android:id/text1
,并且图标的ImageView
必须具有ID @android:id/icon
。例如,上面的R.layout.tab
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<ImageView android:id="@android:id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView android:id="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
答案 1 :(得分:2)
快速添加@Mikes非常有用的答案:
Android Studio现在有一个模板,介绍如何在XML布局中使用TabLayout
和TabItem
设置。使用&#34;新建&gt;创建所有需要的文件活动&gt;选项卡式活动&#34; 并选择&#34;操作栏标签(使用ViewPager)&#34; ,如屏幕截图所示:
如果您想在没有自定义视图的情况下调整TabItem
的外观:使用白色矢量资源作为标签android:icon
和色调使用选择器(根据android:state_selected
提供不同的颜色)
当前所选标签下的线条颜色在标记app:tabIndicatorColor
上设为TabLayout
。
我花了一段时间才开始工作,所以完整的步骤变成了一个很长的答案,我不想在这里复制它们。您可以通过以下完整代码找到我更详细的答案:
答案 2 :(得分:0)