Questa sembra essere un'aggiunta relativamente recente alla libreria di progettazione, apparentemente aggiunta nella versione 23.2.0, sebbene non sia menzionata in the revision history. La sua funzionalità è piuttosto semplice e gli unici attributi che sembra utilizzare sono i tre dati nel suo docs: text
, icon
e layout
.
Da testing, sembra che sia fondamentalmente un collegamento XML per creare un nuovo Tab
e impostarne il testo, l'icona e l'View
personalizzato, come si farebbe di solito nel codice. Quando viene visualizzato il messaggio "Questa vista non viene effettivamente aggiunta a TabLayout", credo che sia intesa a suggerire che non è un View
nel senso normale, in quanto non è possibile impostare alcun tipo di attributo di layout standard su di esso, ad esempio layout_width
o background
. Serve semplicemente a causare il TabLayout
per creare un nuovo Tab
per ogni TabItem
e chiamare setText()
, setIcon()
e setCustomView()
di conseguenza.
Ad esempio, per aggiungere un Tab
nel codice, ci sarebbe di solito fare qualcosa di simile:
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);
Mentre ora siamo in grado di sostituire tutto dopo il commento di cui sopra con l'aggiunta di un TabItem
nel 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>
Si noti che si applicano ancora gli stessi requisiti per il layout personalizzato View
. Cioè, il TextView
per il testo deve avere l'ID di risorsa del sistema @android:id/text1
, e l'ImageView
per l'icona deve avere l'ID @android:id/icon
. A titolo di esempio, il R.layout.tab
dall'alto:
<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>
In TabItem tuo esempio, si definisce l'attributo di layout nel testo cornice aggiunta e l'icona. Stai dicendo che Android sa di applicare l'attributo di testo ("Tab 1") nel TextView del tuo layout personalizzato ("@android: id/text1")? –
Sì, esattamente. Ecco perché 'TextView' e' ImageView' devono avere quegli ID specifici. È così che funziona anche nel codice, se hai mai impostato 'View's personalizzati su' Tab's. –
Grazie! Se questo dovesse essere impostato con un ViewPager, dovresti semplicemente passare l'oggetto TabLayout nell'adattatore in modo che possa informare ViewPager delle schede esistenti? Un modo per integrarli senza che il ViewPager compilare automaticamente il TabLayout come di solito è fatto? –