将TabItem放置在布局XML中时如何使用? [英] How is TabItem used when placed in the layout 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版中添加的,尽管在文档:text
,icon
和layout
.
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_width
或background
.它只是使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屋!