这似乎是设计库中相对较新的添加,据说是在版本23.2.0中添加的,尽管它没有在修订历史记录中提到。它的功能非常基本,唯一使用的属性似乎是其文档中给出的三个: text
, icon
和 layout
。
从测试结果来看,它基本上是一个XML快捷方式,用于创建一个新的Tab
,并设置其文本、图标和自定义View
,就像我们通常在代码中做的那样。当它说“此视图实际上未添加到TabLayout”时,我认为它意味着它不是传统意义上的View
,因为您无法在其上设置任何标准布局属性,如layout_width
或background
。它只是为了使TabLayout
为每个TabItem
创建一个新的Tab
,并相应地调用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>
TextView
和ImageView
需要具有那些特定的ID。如果您曾经在Tab
上设置自定义View
,那么代码也是这样工作的。 - Mike M.ViewPager
的话,我认为你需要自己处理设置,因为我相信TabLayout
在自动填充其选项卡时无法使用自定义视图,并且文本会自动从PagerAdapter
中提取。可能有一些可行的方法来解决这个问题,但我需要再考虑一下。 - Mike M.RadioGroup
。如果你想用它来交换View
,你可以使用它来控制ViewFlipper
或ViewSwitcher
,但这些都没有内置的滑动功能。或者你可以进行基本的View
操作,使用ViewGroup#addView()
和removeView()
。或者你可以执行自己的FragmentTransaction
,但是,除非你实现它,否则没有滑动功能。 - Mike M.TabItem
并使用android:layout
参数的帖子。我在哪里可以找到更大的布局 XML 文件示例? - Someone Somewhere