Ответ 1
Это, по-видимому, относительно недавнее дополнение к библиотеке дизайна, видимо, добавленное в версии 23.2.0, хотя оно не упоминается в истории изменений. Это функциональность довольно простая, и единственными атрибутами, которые, по-видимому, используются, являются три приведенные в docs: text
, icon
и layout
.
От тестирования кажется, что это в основном XML-ярлык для создания нового Tab
и установка его текста, значка и пользовательского View
, как это обычно бывает в коде. Когда он говорит: "Это представление на самом деле не добавлено в TabLayout", я считаю, что это означает, что он не является View
в обычном смысле, поскольку вы не можете установить на него какой-либо стандартный атрибут раскладки, например layout_width
или background
. Он просто служит для создания 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
для текста должен иметь идентификатор ресурса системы @android:id/text1
, а ImageView
для значка должен иметь идентификатор @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>