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

Nat*_*Fig 27 android android-layout android-tabs android-tablayout

TabLayout文件给出了嵌套的例子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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Mik*_* M. 36

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

从测试开始,它似乎基本上是一个XML快捷方式,用于创建新的Tab,并设置其文本,图标和自定义View,就像通常在代码中一样.当它说"这个视图实际上没有添加到TabLayout"时,我认为这意味着它不是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);
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

请注意,自定义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>
Run Code Online (Sandbox Code Playgroud)

  • 这是我能找到的唯一一篇提到“TabItem”并使用“android:layout”参数的帖子。在哪里可以找到布局 xml 文件的更大示例? (2认同)