2012-08-14 31 views
16

Sono nuovo nello sviluppo di Android e ho iniziato a creare la mia interfaccia utente. Vedo che è possibile creare qualcosa di simile in modo dinamico (Dynamic Layouts):Layout dinamico vs XML in Android?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ScrollView sv = new ScrollView(this); 
    LinearLayout ll = new LinearLayout(this); 
    ll.setOrientation(LinearLayout.VERTICAL); 
    sv.addView(ll); 
    TextView tv = new TextView(this); 
    tv.setText("Name"); 
    ll.addView(tv); 
    EditText et = new EditText(this); 
    ll.addView(et); 
    Button b = new Button(this); 
    b.setText("Ok"); 
    ll.addView(b); 
} 

ma vedo anche che NetBeans ha un file risorse-> Layout> main.xml. Così si può creare un layout XML per l'interfaccia utente (Declaring XML layout):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Hello World, AndroidTest" 
    /> 
</LinearLayout> 

Quindi la mia domanda è: quale devo usare? cosa è raccomandato e quali sono i pro/contro dei layout dinamici rispetto a XML nello sviluppo di Android?

risposta

25

Utilizzare i file di risorse XML di layout.

In primo luogo, i set di risorse (ad esempio res/layout-land/ in aggiunta a res/layout/) consentono di definire più UI da utilizzare in circostanze diverse, con il sistema che sceglie automaticamente quello giusto in base alle esigenze. L'equivalente in Java sarebbe un brutto insieme di dichiarazioni if o switch.

In secondo luogo, esistono strumenti che consentono di creare correttamente tali risorse di layout. Anche se la costruzione della GUI drag-and-drop di Eclipse non è la tua tazza di tè (ad esempio, stai usando NetBeans), Lint ti aiuterà a segnalare difetti nei tuoi layout, per i quali indicherà solo un sottoinsieme nel equivalente codice Java.

In terzo luogo, tende ad essere più conciso, quindi se stai scrivendo questa roba a mano, l'XML sarà meno digitato.

In quarto luogo, circa il 98% di tutto il codice di esempio che troverete utilizzerà i file XML di layout e circa il 98% di tutte le risposte dell'interfaccia utente che trovate qui su StackOverflow (e altre risorse di supporto) presuppone l'utilizzo di file XML di layout. Mentre sei libero di evitare XML - forse sei stato attaccato da parentesi angolari come un bambino o qualcosa del genere - nuoterai controcorrente, combattendo la corrente rispetto a ciò che fanno gli sviluppatori Android.

+0

+1 grazie. XML è allora. Ho avuto la sensazione, anche se prendendo più codice sul sito Android utilizza XML. –

+5

Inoltre, nel codice Java devi compilare ed eseguire il codice per vedere come appare il layout, mentre in XML (se usi eclipse) puoi vederlo direttamente con gli strumenti forniti da eclipse. –

3

Si consiglia di utilizzare i layout xml per la maggior parte delle parti dei progetti. È possibile inserire i layout in cartelle diverse, quali:

Layout-land -> per il paesaggio

Layout-port -> per il ritratto

Layout-V15 -> per Android versione> = 15

layout sw600dp -> per gli schermi con una certa larghezza

con questi classificatori di risorse si può avere rapidamente una grande varietà nei vostri layout per supportare la vasta gamma di dispositivi Android, senza dover codificare un lo t extra.

A mio parere, questo è il più grande vantaggio dell'utilizzo delle risorse xml rispetto alla creazione di tutti i layout in modo dinamico. Per maggiori informazioni vedi this link about resources

+0

+1 ora vedo con xml almeno alcune preoccupazioni sulle incoerenze dell'interfaccia utente verranno tolte dalla mia schiena anche –

1

Bene, dichiaro mu UI in xml (99% del tempo), perché è più facile per me lavorare in questo modo.

E 'buona norma logica Codice separati UI e, XML è più facile per la descrizione dell'interfaccia utente (considerare l'utilizzo di this old designer o passare a Eclipse IDE ed è progettista)

Inoltre, un app Android può avere più disegni (per telefoni e compresse) e sarà doloroso a mano il codice che in Java

Semplicemente, l'uso di XML

+0

+1 Grazie .. quindi Eclipse ha un visual designer per Android? –

+1

Sì, fa parte del plugin ADT per Eclipse ..... [help] (http://developer.android.com/sdk/installing/installing-adt.html) –

+0

L'uso di XML non separa l'interfaccia utente e la logica del codice . –

1

preferisco XML per la maggior parte delle cose in quanto consente di separare il contenuto dal codice e tende ad essere più pulito di modificare in particolare quando il progetto diventa grande e dimentichi ciò che hai scritto qualche tempo fa. L'utilizzo di XML e stili ti consentirà di ottenere un aspetto coerente anche nell'app. Consente inoltre al sistema di layout di occuparsi del sollevamento di carichi pesanti e non si finirà con le viste che hanno un riferimento al contesto della propria attività. (Che è male, quando ruoti e la tua attività è ricreata). Nel complesso tende ad essere un'opzione più veloce e se puoi farlo in XML di quanto mi piaccia. Anche la maggior parte dei manuali/manuali di androide seguono questa configurazione. (Vedi Android Dev Docs, Mark Murphy di CommonsWare)

Dynamic ha il vantaggio che è in grado di personalizzare alcune cose in modi più avanzati e può risolvere alcuni problemi di layout abbastanza facilmente. Ci sono alcuni aspetti positivi oltre a quello, ma preferisco fare tutto in XML prima e se non può essere fatto o è difficile, fallo in codice. Alcune cose possono essere fatte in XML molto più facilmente che nel codice.

1

È completamente la vostra scelta. Probabilmente la maggior parte degli sviluppatori Android utilizza XML per codificare i propri layout della propria app, poiché è stata progettata appositamente per questo. Tuttavia, personalmente provengo da uno sfondo di sviluppo del gioco e non ho davvero bisogno dei widget dell'interfaccia utente forniti da Android, quindi quando uso un widget UI, semplicemente lo codifico in java.

Spero che questo aiuti.

+0

+1 grazie per il tuo contributo –

2

layout basato su XML dipende dal casting, perché bisogna usare:

Button myButton = (Button) findViewById(R.id.my_button); 

in modo da avere una fusione e che richiede tempo di ricerca XML. Quando si utilizza la creazione dinamica di un'interfaccia utente è molto più difficile gestirlo. Devi organizzare tutto ma non hai bisogno di lanciare tanto.

Preferisco la terza soluzione - RoboGuice Utilizza il pattern di dipendenza dipendenza e non ti interessa il casting ed è più veloce creare un'app. Inoltre più flessibile. Considera di avere un normale campo di testo. Quindi vuoi cambiarlo in area di testo. In RoboGuice si tratta solo di 2 modifiche (tranne le modifiche all'utilizzo). È anche più veloce quando si utilizza Context (il contesto è un oggetto che consuma molta memoria e il riferimento alla memorizzazione è segno di una cattiva codifica).

Quindi il mio consiglio è: usare XML perché è semplice gestire l'interfaccia utente. Utilizzare RoboGuice per programmare velocemente.