2011-07-12 14 views
9

Ho studiato l'unione e l'inclusione ultimamente, e ho una domanda che non riesco a capire anche la risposta. Supponiamo che abbia un layout che definisce un componente di intestazione che voglio aggiungere a più layout. Tuttavia, voglio cambiare il titolo o l'icona di ogni intestazione per ogni utilizzo di inclusione. Per esempio dice che ho il seguente schema:Modifica degli attributi nidificati su un layout incluso

<RelativeLayout android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       style="@style/menu_header"> 

    <Button android:id="@+id/backButton" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/button" 
      android:text="@string/back"/> 

    <TextView style="@style/headerTitle" 
       android:layout_centerInParent="true" 
       android:text="${title}" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content"/> 
</RelativeLayout> 

Poi possono includere che in altri formati utilizzando:

<LinearLayout ...> 
    <include android:id="@+id/searchHeader" layout="@layout/shared_header" title="Search"/> 
    ... 
</LinearLayout> 

so di poter modificare qualsiasi layout_ * attributo dell'elemento radice, ma posso definisci altri attributi che vengono sostituiti nel layout, come ad esempio "titolo" in questo esempio, senza dover creare la mia sottoclasse di Visualizza, aggiungere le definizioni declarabili in valai/risorse, ecc.?

Avere qualcosa del genere renderebbe la creazione di viste riutilizzabili molto più semplice, ma non riesco a trovare alcuna prova che dice se l'unione + include può farlo.

+0

Penso che se si desidera modificare il contenuto di tali viste, si dovrebbe utilizzare una visualizzazione personalizzata composta da tali viste. La cosa include è più una funzionalità per quando si desidera copiare/incollare una vista/un gruppo di viste altrove. – Gregory

+0

Ma include è di uso limitato se è possibile copiare e incollare esattamente lo stesso codice. Le visualizzazioni personalizzate richiedono molto più overhead all'autore, l'aggiunta di opzioni di stile personalizzate, la creazione di codice per sottoclasse una vista, ecc. Se tutto ciò che sto facendo è modificare alcuni attributi degli elementi nidificati, sembra che si possa fare senza mangiare l'intero elefante – chubbsondubs

+0

Ho letto il rapido "tutorial" su include di nuovo (http://android-developers.blogspot.com/2009/02/android-layout-tricks-2-reusing-layouts.html), e sembra abbastanza chiaro che è solo pensato per essere un semplice copia/incolla, specialmente quando si include un "layout secondario" comune in 2 layout diversi (verticale e orizzontale). Anche se trovo la tua idea abbastanza interessante dopo tutto:/ – Gregory

risposta

5

La risposta è no. Sfortunatamente, Android non è così potente. Devi creare la tua estensione di ViewGroup e scrivere più codice.

+0

puoi fornire un esempio di come farlo? – jpotts18

+0

No, perché scrivere un componente personalizzato richiederebbe più impegno e spazio di quanto consentito in un commento. Non puoi fare ciò che descrivo usando solo i file di layout. Devi scrivere il tuo componente cliente estendendo ViewGroup se vuoi creare qualcosa che può essere riutilizzato e parametrizzato in questo modo. – chubbsondubs

+0

Proverò a farlo. Grazie! – jpotts18

Problemi correlati