Autore Topic: Unione Layout XML e Java  (Letto 605 volte)

Offline beddu85

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    motorola Atrix
  • Sistema operativo:
    android 2.3.4
Unione Layout XML e Java
« il: 10 Dicembre 2014, 15:40:09 CET »
0
Ciao Ragazzi, ho iniziato a studiare android da una settimana. Mentre studio la teoria cerco di fare qualche programmino in maniera da capire meglio il funzionamento. Non faccio mai programmi nuovi ma inserisco funzionalità in più in maniera da far coesistere le parti precedenti con quelle nuove. Ho trovato un piccolo problema riguardo i layout perché durante un programma ho fatto un layout di questo tipo:

TextView tv2 = new TextView (this);
tv2.setText(messaggio+"Ciao Mondo Androide!!!");
Button button = new Button(this);
button.setText("Fammi attendere!");
LinearLayout layout = new LinearLayout(this);
layout.addView(button);
layout.addView(tv2);
setContentView(layout);

Fin qui tutto ok. Ho visto pure esempi di layout dentro layout in maniera da organizzare i bottoni e le scritte tipo (ho omesso parte di codice):

TableLayout tableLayout = new TableLayout(this);
tableLayout.addView(row1);
tableLayout.addView(row2);
tableLayout.addView(row3);
LinearLayout linearLayout1 = new LinearLayout(this);
linearLayout1.addView(button1);
linearLayout1.addView(button2);
LinearLayout linearLayout2 = new LinearLayout(this);
linearLayout2.addView(tableLayout);
linearLayout2.addView(linearLayout1);
setContentView(linearLayout2);

Poi ho scoperto che i Layout si possono fare anche in formato XML ed ho fatto un nuovo layout (diverso come funzioni) ed ho usato solo:

setContentView(R.layout.main);

ora la mia domanda è come faccio ad unire i due layout? Ho provato i seguenti comandi ma niente:

layout.addView(R.layout.main); non funzionante xkè View non accetta riferimenti int

LinearLayout layout = new LinearLayout(this);
View prova = (View) findViewById(R.layout.main);
layout.addView(prova);
setContentView(layout);
sembrerebbe funzionare ma quando eseguo l'app si blocca.

LinearLayout prova = (LinearLayout) findViewById(R.layout.main); stesso problema di prima.

Ho provato ad usare ViewGroup ma sicuramente non l'ho usato correttamente.

Vi volevo chiedere è possibile unire un layout fatto in java con uno fatto xml e farli comparire tutti e due insieme?
attendo vostre delucidazioni grazie Davide

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Unione Layout XML e Java
« Risposta #1 il: 10 Dicembre 2014, 15:55:34 CET »
0
Secondo me il modo preferenziale per fare i layuout dovrebbe essere il file XML e basta (infatti la maggior parte degli esempi segue questa filosofia). A limite fai il grosso del layout in XML e poi se proprio necessario aggiungi qualche View in modo programmatico (in Java). Sono molto molto scettico per i layout fatti interamente in modo programmatico.

Se hai iniziato da poco io ti consiglio di usare solo i layout in XML.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline beddu85

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    motorola Atrix
  • Sistema operativo:
    android 2.3.4
Re:Unione Layout XML e Java
« Risposta #2 il: 10 Dicembre 2014, 16:04:41 CET »
0
Si ho capito ma come faccio ad unire i due layout?
O uso il layout in java o quello in XML perché dato che XML non lo posso aggiungere con il comando "layout.addView(R.layout.main);" e dato che il "setContentView(layout);" accetta un solo layout da settare o uso XML o uso java.


Offline arlabs

  • Utente normale
  • ***
  • Post: 434
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Unione Layout XML e Java
« Risposta #3 il: 10 Dicembre 2014, 16:25:37 CET »
0
Per sovrapporre 2 layout puoi usare setContentView e addContentView.

Pre "tradurre" l'intero, che per te rappresenta un layout in una View devi fare l'operazione di "inflate".

tale operazione ti genera tutta la struttura di View (e ViewGroup) che hai definito in un XML

Codice (Java): [Seleziona]
        View layoutView = getLayoutInflater().inflate(R.layout.layoutID, null);
Cmq, guardati la documentazione:
http://developer.android.com/reference/android/view/LayoutInflater.html#inflate(int, android.view.ViewGroup)

Ciao

P.S. findViewById non funziona finché non hai aggiunto la View all'activity.
« Ultima modifica: 10 Dicembre 2014, 16:29:54 CET da arlabs »

Offline beddu85

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    motorola Atrix
  • Sistema operativo:
    android 2.3.4
Re:Unione Layout XML e Java
« Risposta #4 il: 11 Dicembre 2014, 11:14:59 CET »
0
funziona benissimo il comando
Codice (Java): [Seleziona]
View layoutView = getLayoutInflater().inflate(R.layout.layoutID, null);
ora il codice funziona:
Codice (Java): [Seleziona]
        LinearLayout layout1 = new LinearLayout(this);
        layout1.addView(tv2);
        layout1.addView(button);
        TableLayout layout = new TableLayout(this);
        View layoutView = getLayoutInflater().inflate(R.layout.main, null);
        layout.addView(layout1);
        layout.addView(layoutView);
        setContentView(layout);

il problema sta che così ho come due righe della tabella e non mi ha allargato a tutto schermo la parte di layout R.layout.main che prima allargava a tutto schermo. Forse invece del TableLayout dovrei usare altro.
Vi allego anche la parte di file xml:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >
    <LinearLayout android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:orientation="horizontal">
                                <Button android:layout_width="wrap_content"
                                                android:layout_height="wrap_content"
                                                android:id="@+id/saveButton"
                                                android:text="@string/saveButton" />
                                <Button android:layout_width="wrap_content"
                                                android:layout_height="wrap_content"
                                                android:id="@+id/loadButton"
                                                android:text="@string/loadButton" />
        </LinearLayout>
        <EditText android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:id="@+id/textArea"
                                android:inputType="textMultiLine"
                                android:gravity="top|left" />

</LinearLayout>


ho visto che ci sono 100 comandi diversi per organizzare le cose per esempio:
Codice (Java): [Seleziona]
FrameLayout layout = new FrameLayout(this); accetta un widget, lo allinea in alto a sinistra e lo estende per tutta la dimensione disponibile al layout stesso
Codice (Java): [Seleziona]
RelativeLayout layout = new RelativeLayout(this); disegna un componente aggiunto al suo interno nelle sue dimensioni ideali, senza allargarlo
Codice (Java): [Seleziona]
LinearLayout layout = new LinearLayout(this); dispone più componenti uno di seguito all’altro, sia orizzontalmente sia verticalmente
Codice (Java): [Seleziona]
TableLayout layout = new TableLayout(this); sistema i componenti secondo uno schema a tabella, suddiviso cioè in righe e colonne
Codice (Java): [Seleziona]
TableRow tableRow = new TableRow(this);forma una riga della tabella

Per esempio il LinearLayout sembra molto simile al TableRow.
Ce ne sono altri o basta combinare meglio questi?

Offline arlabs

  • Utente normale
  • ***
  • Post: 434
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Unione Layout XML e Java
« Risposta #5 il: 11 Dicembre 2014, 14:18:38 CET »
0
Io ti ribadisco quello che ti ha già detto bradipao.

Che necessità hai di generare Layout da codice?
Per configurare come devono distribuirsi le View, ci sono un gran numero di parametri, e tu non ne setti nemmeno uno... è molto più semplice (oltre che versatile) generare layout XML.
Con AndroidStudio (che è arrivato in release stabile) hai anche una bella ed affidabile preview grafica.

Se vuoi strutturarlo a comparti lo puoi fare usando i Fragment e diversi file XML

Offline beddu85

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    motorola Atrix
  • Sistema operativo:
    android 2.3.4
Re:Unione Layout XML e Java
« Risposta #6 il: 11 Dicembre 2014, 14:43:48 CET »
0
Ragazzi ho iniziato da una settimana a programmare in android quindi mi piacerebbe avere qualche dritta da voi.
Non ho nessuna necessità di generare layout da codice... erano solo delle prove.
Sono della idea che se uno usa i file xml diventa più versatile l'app anche in caso di modifica successiva.
Grazie delle dritte

Offline arlabs

  • Utente normale
  • ***
  • Post: 434
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Unione Layout XML e Java
« Risposta #7 il: 11 Dicembre 2014, 18:01:11 CET »
0
Se è per sperimentare, sperimenta pure... ma il come le View vengono disposte in un GroupView dipende sia da parametri della GroupView specifica che delle View in esse contenute. In un qualunque tutorial queste cose vengono accennate.

Se vuoi sperimentare, questi parametri li puoi inserire nell'XML per capire come funzionano. Giusto per citere i principali:
- layout_width & layout_height
- gravity
- layout_gravity
- layout_margin
- padding
- layout_weight

Ogni parametro ha un suo "duale" un metodo setParam nella View per fare la stessa cosa da codice.

Ciao.