2012-04-04 6 views
6

La mia applicazione mostra un'interfaccia utente a un pannello o un'interfaccia utente a due riquadri, a seconda della configurazione dello schermo. Sugli schermi più piccoli, dovrebbe essere un unico riquadro sia in verticale che in orizzontale. Sugli schermi di medie dimensioni (qualsiasi cosa con una "larghezza minore" di 600 dpi e oltre), l'orientamento orizzontale consente di adattarsi piuttosto bene al layout a due riquadri, ma con orientamento verticale dovrebbe utilizzare il layout a pannello singolo. Sugli schermi più grandi, dovrebbe usare il layout a due riquadri su entrambi gli orientamenti. Voglio anche supportare i qualificatori di stile 3.2+ (come sw600dp e sw720dp) così come il vecchio qualificatore "bucket size" ("xlarge").In che modo è possibile associare diverse configurazioni dello schermo a un piccolo insieme di layout senza dover duplicare parti del mio XML di layout?

Il modo più diretto per farlo è creare diversi file di layout XML diversi, uno per ogni configurazione:

  • res/layout sw600dp-terra/main.xml
  • res/layout sw600dp- porto/main.xml
  • res/layout sw720dp-terra/main.xml
  • res/layout sw720dp-port/main.xml
  • res/layout xlarge-port/main.xml
  • ri s/layout xlarge-terra/main.xml
  • res/layout di porte/main.xml
  • res/layout/main.xml

Di conseguenza, c'è un sacco di duplicazione del codice in questi 8 file XML che essenzialmente descrivono solo due layout distinti.

Come posso fare questo senza dover mantenere tutti questi file XML duplicati, che sono un mal di testa di manutenzione?

risposta

11

È possibile utilizzare alias di layout. Piuttosto che descrivere il tuo layout direttamente nei file XML per ogni configurazione dello schermo, dovresti definire i tuoi due layout in due file XML chiamati, ad esempio, "onepane.xml" e "twopanes.xml". Questi file vanno in res/layout.

Ora è necessario mappare questi layout sulla diversa configurazione dello schermo, ed è qui che la tecnica "layout alias" è molto utile. Per ogni combinazione di qualificatori dello schermo, creare un file XML in res/values-X/layout.xml, dove X è la combinazione del qualificatore. In quel file, dichiarare una risorsa di layout che punta a uno @ layout/onepane o @ layout/twopanes, a seconda dei casi:

res/valori-sw600dp-terra/layout.xml:

<resources> 
    <item name="main" type="layout">@layout/twopanes</item> 
</resources> 

res/valori-sw600dp-port/layout.xml:

<resources> 
    <item name="main" type="layout">@layout/onepane</item> 
</resources> 

Fare lo stesso per gli altri le combinazioni di configurazione, e in questo modo si può realizzare quello che stai cercando: è possibile mappare i due Layou ts (onepane e twopane) a diverse configurazioni dello schermo senza dover duplicare il layout.

Per ulteriori informazioni su questo, dare un'occhiata al "Supporto di più schermi" lezione sulla formazione Android: http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters

+0

Questo non funziona per me - ho avvertimenti peli e un crash durante l'esecuzione. Ci sono esempi funzionanti di questo? –

Problemi correlati