Autore Topic: Scambiando un LinearLayout con una TextView, si scompone tutta la grafica.  (Letto 491 volte)

Offline gfkat

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
Ciao a tutti,
mi presento molto brevemente, mi chiamo Luciano e sto sviluppando una piccola applicazione per la gestione degli sms. Ho il seguente problema a cui non riesco proprio a venire a capo.
Vado a popolare una lista con l'elenco degli sms. I componenti della lista possono essere di due tipi, inviato o ricevuto. Quindi ho due file xml chiamati list_row_msg_s.xml e list_row_msg_r.xml.

L'unica cosa che differenzia i due file xml è la posizione del testo rispetto a "immagine+data+ora" che formano un LinearLayout verticale.
Per quanto riguarda list_row_msg_r non ho alcun problema. Invece su list_row_msg_s non riesco ad invertire il testo del msg con il linearlayout su spiegato.
Introduco un po' di codice per chiarire meglio le idee:

Caso funzionante, tutto ok:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/linLayOriz"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:layout_marginBottom="8dp"
   android:layout_marginLeft="2dp"
   android:layout_marginRight="2dp"
   android:layout_marginTop="8dp"
   android:gravity="center_vertical|right"
   android:orientation="horizontal" >

    <LinearLayout
       android:id="@+id/linLayVert"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="bottom"
       android:layout_marginRight="8dp"
       android:gravity="center_horizontal"
       android:orientation="vertical" >

        <ImageView
           android:id="@+id/imvSend"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:src="@drawable/out" />

        <TextView
           android:id="@+id/txtData"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="31/01/2011"
           android:textColor="#808080"
           android:textSize="8dip" />

        <TextView
           android:id="@+id/txtOra"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="14:30"
           android:textColor="#808080"
           android:textSize="8dip" />
    </LinearLayout>

    <TextView
       android:id="@+id/txtMsg"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Questo è il testo del messaggio inviato su più linee e quindi gòfjhieufhdaòijdòsjdifjso..." />

</LinearLayout>

Screenshot di quanto disegnato su schermo:



Come potete vedere è tutto funzionante.

Ora semplicemente invertendo l'ordine inserendo prima la TextView e poi il LinearLayout verticale:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/linLayOriz"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:layout_marginBottom="8dp"
   android:layout_marginLeft="2dp"
   android:layout_marginRight="2dp"
   android:layout_marginTop="8dp"
   android:gravity="center_vertical|right"
   android:orientation="horizontal" >

    <TextView
       android:id="@+id/txtMsg"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Questo è il testo del messaggio inviato su più linee e quindi gòfjhieufhdaòijdòsjdifjso..." />
   
    <LinearLayout
       android:id="@+id/linLayVert"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="bottom"
       android:layout_marginRight="8dp"
       android:gravity="center_horizontal"
       android:orientation="vertical" >

        <ImageView
           android:id="@+id/imvSend"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:src="@drawable/out" />

        <TextView
           android:id="@+id/txtData"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="31/01/2011"
           android:textColor="#808080"
           android:textSize="8dip" />

        <TextView
           android:id="@+id/txtOra"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="14:30"
           android:textColor="#808080"
           android:textSize="8dip" />
    </LinearLayout>

   

</LinearLayout>

In questo caso succede questo bel casino:



Questo succede anche sul telefono, l'ho testato sia su android 2.2 che android 2.3.6 che sulla 4.0.3.
Non riesco a venirne a capo in nessun modo, sinceramente ho fatto così tanti tentativi che ho esaurito le soluzioni.
C'è qualcuno in grado di aiutarmi?

Offline xWOLKx

  • Utente junior
  • **
  • Post: 72
  • Adoro quella citazione western!
  • Respect: +7
    • xWOLKx
    • Wolkrasgt
    • Mostra profilo
    • ZondeIT
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Sistema operativo:
    Windows7
Re:Scambiando un LinearLayout con una TextView, si scompone tutta la grafica.
« Risposta #1 il: 17 Febbraio 2012, 09:18:28 CET »
0
beh è ovvio...i componenti vengono disegnati in ordine di dicitura. Quando disegna la text view opccupa tutta la riga, il linear layout c'è ma è fuori schermo perche si posiziona in orizzontale dopo un oggetto che occupa tutto lo schermo.

Ora sorvoliamo che avresti dovuto usare un relative layout puoi gestire il tutto con il layout_weight

Offline xWOLKx

  • Utente junior
  • **
  • Post: 72
  • Adoro quella citazione western!
  • Respect: +7
    • xWOLKx
    • Wolkrasgt
    • Mostra profilo
    • ZondeIT
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Sistema operativo:
    Windows7
Re:Scambiando un LinearLayout con una TextView, si scompone tutta la grafica.
« Risposta #2 il: 17 Febbraio 2012, 09:23:50 CET »
0
Parti con un LinearLayout con
orientation:vertical
layout_height/layout_width:fill_parent (se ti serve)

All'interno posizioni un relativeLayout e poisizioni l'immagine sull'angolo sinistro in alto, le date sotto l'immagine e il testo a destradell'immagine.
Con l'editor dovrebbe essere facilissimo.

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:Scambiando un LinearLayout con una TextView, si scompone tutta la grafica.
« Risposta #3 il: 17 Febbraio 2012, 18:39:45 CET »
0
come ti diceva wolk, impara bene l'uso dei relativelayout..puoi impostarli in modo che stiano sempre a destra ,sinistra,sotto  sopra alle altre cose del layout..in questo modo puoi fare praticamente quello che vuoi e mantenere il tipo di progetto che hai in testa senza che i cambiamenti delle stringhe o delle immagini intrferiscano.
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!

Offline gfkat

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
Re:Scambiando un LinearLayout con una TextView, si scompone tutta la grafica.
« Risposta #4 il: 17 Febbraio 2012, 18:41:43 CET »
0
Grazie ragazzi ho risolto in questo modo:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/linLayOriz"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:layout_marginLeft="2dp"
   android:layout_marginRight="2dp"
   android:gravity="center_vertical|right"
   android:orientation="horizontal" >

    <RelativeLayout
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_marginBottom="8dp"
       android:layout_marginLeft="60dp"
       android:layout_marginTop="8dp"
       android:gravity="right" >

        <TextView
           android:id="@+id/txtMsg"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_centerVertical="true"
           android:layout_toLeftOf="@+id/linLayVert"
           android:gravity="right"
           android:text="Questo è il testo del messaggio inviato su più linee e quindi gòfjhieufhdaòijdòsjdifjso..."
           android:textColor="#FF1E90FF" />

        <LinearLayout
           android:id="@+id/linLayVert"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentRight="true"
           android:layout_alignParentBottom="true"
           android:layout_marginLeft="8dip"
           android:gravity="center_horizontal|bottom"
           android:orientation="vertical" >

            <ImageView
               android:id="@+id/imvSend"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:src="@drawable/out" />

            <TextView
               android:id="@+id/txtData"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="31/01/2011"
               android:textColor="#808080"
               android:textSize="8dip" />

            <TextView
               android:id="@+id/txtOra"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="14:30"
               android:textColor="#808080"
               android:textSize="8dip" />
        </LinearLayout>
    </RelativeLayout>

</LinearLayout>

Buon lavoro,
Luciano.