2013-03-14 13 views
9

Sto provando a creare schede in un layout. Ho trovato un sacco di esempi e tutorial utilizzando TabWidget, TabHost, ma tutti implicano una delle seguenti opzioni:Come posso creare un layout con le schede completamente in XML?

  • codice Java nell'attività
  • attività separato per ogni schede
  • frammenti separati per ciascun schede

Il contenuto all'interno delle schede è statico, quindi dovrei essere in grado di includere tutto nel layout, in puro XML.

Ad ogni modo per farlo?

+3

A un certo punto si dovrà avere del codice: l'xml non saprà come passare quando si fa clic su una scheda e cosa fare quando ciò accade. Puoi evitare qualcosa di pesante come attività/frammenti, ma non sarà senza codice. –

risposta

12

La semplice risposta, no. Devi configurare il tuo TabHost in codice Java e creare le tue schede. È possibile avere layout statici per le schede senza utilizzare frammenti ma richiede ancora l'installazione in Java.

Se non si esegue questa impostazione in codice, il proprio TabWidget non saprà quale layout corrisponde a quale scheda e non sarebbe in grado di funzionare. Dovrai scrivere un po 'di codice.

Il codice per fare ciò è davvero semplice.

L'XML (collocato all'interno il layout in cui si desidera):

<TabHost android:id="@+id/tab_host" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 
    <LinearLayout android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
     <TabWidget android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 
     <FrameLayout android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
      <LinearLayout 
       android:id="@+id/tab_one_container" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" /> 
      <LinearLayout 
       android:id="@+id/tab_two_container" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" /> 
     </FrameLayout> 
    </LinearLayout> 
</TabHost> 

Il codice Java (posizionato ovunque si imposta il layout):

TabHost host = (TabHost)findViewById(R.id.tab_host); 
host.setup(); 

TabSpec spec = host.newTabSpec("Tab One"); 
spec.setContent(R.id.tab_one_container); 
spec.setIndicator("Tab One"); 
host.addTab(spec); 

spec = host.newTabSpec("Tab Two"); 
spec.setContent(R.id.tab_two_container); 
spec.setIndicator("Tab Two"); 
host.addTab(spec); 
+0

Questo tipo di schifo. Perché non posso fare riferimento all'ID del layout nella scheda per collegarli? Non mi dispiace scrivere codice, ma mi sento come dover mettere quei link nel codice fuori posto. – erwan

+1

Non puoi farlo perché Google non l'ha scritto nell'SDK. Vorrei avere una risposta migliore per te, ma quando lavori con la struttura di qualcun altro, allora sei soggetto ai limiti che hanno messo in atto. Questo sembra essere uno di quei limiti. – MCeley

Problemi correlati