将TabItem放置在布局XML中时如何使用? [英] How is TabItem used when placed in the layout XML?

查看:367
本文介绍了将TabItem放置在布局XML中时如何使用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

TabLayout文档给出了一个示例将TabItem直接嵌套在TabLayout内部的方法如下:

The TabLayout documentation gives an example of nesting TabItem directly inside TabLayout like so:

<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的文档说:

But it gives no example of how this could be used in practice, and the documentation for TabItem says:

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

This view is not actually added to TabLayout, it is just a dummy which allows setting of a tab items's text, icon and custom layout.

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

So what is TabItem for? After extensive Googling, I cannot find a single example of anyone defining TabItems in XML. Is there any way to set up a tabbed activity using TabItem in the resource file as shown above?

推荐答案

这似乎是设计库中的一个相对较新的功能,显然是在23.2.0版中添加的,尽管在文档:texticonlayout.

This appears to be a relatively recent addition to the design library, apparently added in version 23.2.0, though it's not mentioned in the revision history. It's functionality is pretty basic, and the only attributes it seems to use are the three given in its docs: text, icon, and layout.

从测试看来,它基本上是创建新的Tab并设置其文本,图标和自定义View的XML快捷方式,就像通常在代码中所做的那样.当它说该视图实际上未添加到TabLayout"时,我认为这意味着它不是常规意义上的View,因为您无法在其上设置任何类型的标准布局属性,例如layout_widthbackground.它只是使TabLayout为每个TabItem创建一个新的Tab,并相应地调用setText()setIcon()setCustomView().

From testing, it seems it's basically an XML shortcut for creating a new Tab, and setting its text, icon, and custom View, as one would usually do in code. When it says "This view is not actually added to TabLayout", I believe it's meant to suggest that it's not a View in the regular sense, in that you can't set any kind of standard layout attribute on it, like layout_width or background. It simply serves to cause the TabLayout to create a new Tab for each TabItem, and call setText(), setIcon(), and setCustomView() accordingly.

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

For example, to add a Tab in code, we would usually do something like this:

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来替换上面的注释之后的所有内容.

Whereas now we can replace everything after the comment above by adding a TabItem in the layout.

<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

Do note that the same requirements for the custom View layout still apply. That is, the TextView for the text must have the system Resource ID @android:id/text1, and the ImageView for the icon must have the ID @android:id/icon. As an example, the R.layout.tab from above:

<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>

这篇关于将TabItem放置在布局XML中时如何使用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆