Wygląda na to, że jest stosunkowo nowym dodatkiem do biblioteki projektowej, najwyraźniej dodanym w wersji 23.2.0, ale nie jest wymienione w the revision history. Jego funkcjonalność jest dość podstawowa i jedyne atrybuty, jakich wydaje się używać, to trzy podane w jego jednostkach: , ,.
Z badań wynika, że jest to skrót XML do tworzenia nowego Tab
i ustawiania jego tekstu, ikony i niestandardowego View
, tak jak zwykle robi się to w kodzie. Kiedy mówi "Ten widok nie jest faktycznie dodany do TabLayout", uważam, że sugeruje on, że nie jest to View
w zwykłym znaczeniu, ponieważ nie można ustawić na nim żadnego standardowego atrybutu układu, takiego jak layout_width
lub background
. To po prostu służy spowodować TabLayout
aby utworzyć nowy Tab
dla każdego TabItem
, i nazywają setText()
, setIcon()
i setCustomView()
odpowiednio.
Na przykład, aby dodać Tab
w kodzie, to zwykle robimy coś takiego:
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);
Podczas gdy teraz możemy wymienić wszystko po komentarzu powyżej dodając TabItem
w układzie.
<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>
Należy pamiętać, że nadal obowiązują te same wymagania dotyczące niestandardowego układu View
. To znaczy, że TextView
dla tekstu musi mieć identyfikator zasobu systemowego @android:id/text1
, a ImageView
dla ikony musi mieć ID @android:id/icon
. Na przykład: R.layout.tab
od góry:
<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>
W TabItem w przykładzie zdefiniowano dodatkowo atrybut układu, a także ustawiono tekst i ikonę. Czy twierdzisz, że Android wie, aby zastosować atrybut tekstowy ("Tab 1") do swojego TextView w niestandardowym layoucie ("@android: id/text1")? –
Tak, dokładnie. Dlatego 'TextView' i' ImageView' muszą mieć te specyficzne identyfikatory. Tak właśnie działa kod, jeśli kiedykolwiek ustawiłeś niestandardowe 'Widok' na' Tab's. –
Dzięki! Jeśli miałbyś to skonfigurować za pomocą ViewPagera, po prostu przekazałbyś obiekt TabLayout do adaptera, aby mógł poinformować ViewPager o istniejących zakładkach? Jakikolwiek sposób na ich integrację bez wyświetlania ViewPagera automatycznie wypełnia TabLayout tak jak zwykle? –