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

时间:2016-06-26 03:29:38

标签: android android-layout android-tabs android-tablayout

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设置选项卡式活动,如上所示?

3 个答案:

答案 0 :(得分:32)

这似乎是对设计库的一个相对较新的补充,显然是在版本23.2.0中添加的,尽管the revision history中没有提到它。它的功能非常基本,它似乎使用的唯一属性是docs中给出的三个:texticonlayout。< / p>

从测试开始,它似乎基本上是一个XML快捷方式,用于创建新的Tab,并设置其文本,图标和自定义View,就像通常在代码中一样。当它说&#34;这个视图实际上没有被添加到TabLayout&#34;,我相信这意味着它不是常规意义上的View,因为你无法在其上设置任何类型的标准布局属性,例如layout_widthbackground。它只会导致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布局中使用TabLayoutTabItem设置。使用&#34;新建&gt;创建所有需要的文件活动&gt;选项卡式活动&#34; 并选择&#34;操作栏标签(使用ViewPager)&#34; ,如屏幕截图所示:

Configure Tabbed Activity Template in Android Studio

如果您想在没有自定义视图的情况下调整TabItem的外观:使用白色矢量资源作为标签android:icon色调使用选择器(根据android:state_selected提供不同的颜色)

当前所选标签下的线条颜色在标记app:tabIndicatorColor上设为TabLayout

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

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

答案 2 :(得分:0)

enter image description here

请参阅com.google.android.material.tabs.TabItem类,该类接受来自属性的图标文本,但似乎您需要在运行时添加标签。