2011-10-08 11 views
7

Perché il mio layout relativo occupano larghezza schermo interoPerché il mio layout relativo occupare larghezza schermo intero

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="#f00" 
    > 
    <Button 
     android:id="@+id/Button01" 
     android:text="Press Here" 
     android:layout_alignParentRight="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"></Button> 
    <Button 
     android:id="@+id/Button02" 
     android:text="02" 
     android:layout_alignParentLeft="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"></Button> 
</RelativeLayout> 

Ho specificato il layout relativo alla "wrap_content", allora perché ci si occupa spazio a schermo intero. Il risultato è lo stesso anche se dico android: layout_width = "fill_parent". Enlighten

Illuminami per favore!

EDIT: Penso di non essere stato molto chiaro con la mia domanda precedente. Ci scusiamo per questo. Quando ho 2 viste figlio in un layout relativo e una di esse è allineata a sinistra e l'altra è allineata a destra e la larghezza dei layout relativa è WRAP_CONTENT quindi mi aspettavo che la larghezza del layout fosse solo la somma della larghezza di 2 pulsanti (isn ' Questo è ciò che WRAP_CONTENT significa ??). So che ci sono altri modi per raggiungere l'interfaccia utente, ma sto solo cercando di capire correttamente questi tag di layout relativi.

EDIT 2: ho sperimentato un po 'e sembra che se si utilizza Layout_AlighParentRight con la larghezza del suo padre come wrap_content la larghezza di layout superiore viene utilizzato per il calcolo (come poche risposte sottolineato qui di seguito). Ma stiamo usando solo il layout_alignParentLeft, quindi funziona come previsto e la larghezza del layout non si estende allo schermo completo. Grazie per l'aiuto gente!

risposta

13

Le altre risposte hanno correttamente rilevato che quando la larghezza del layout relativo è impostata su wrap_content ei suoi figli sono allineati a sinistra e a destra, il layout relativo occupa la larghezza del relativo genitore - in questo caso, l'intero schermo . Se, tuttavia, entrambi i bambini erano allineati su un lato, il layout relativo sarebbe largo quanto il bambino più largo.

Ora se si desidera posizionare i due pulsanti uno accanto all'altro e il layout relativo deve essere ampio quanto la somma delle larghezze dei pulsanti, è necessario un approccio leggermente diverso. Invece di posizionare entrambi i pulsanti rispetto al genitore, fallo con un solo pulsante (ad esempio il primo). Diciamo che il suo posizionamento è rimasto invariato(). Ora il pulsante è flottato a destra, quindi il secondo pulsante, per essere posizionato accanto ad esso, deve essere allineato al lato sinistro del primo pulsante. Pertanto, aggiungiamo semplicemente android:layout_toLeftOf="@id/Button01" (e rimuoviamo la parte android:layout_alignParentLeft="true").

Per ulteriori informazioni, suggerisco di consultare un tutorial molto intuitivo su relative layouts.

+0

Grazie per la risposta Ernesta! ha reso le cose un po 'chiare ora. Ma sono ancora un po 'colpito dal fatto che i layout relativi guardino alla larghezza del genitore se i suoi figli sono allineati su entrambi i lati sinistro e destro. E hey congratulazioni per aver raggiunto il secolo sulla reputazione !! – Santosh

+3

Grazie :). Pensalo in questo modo: 'wrap_content 'significa * essere largo quanto lo spazio occupato dai figli. * Ora se prendi un bambino e dici' alignParentRight', si dovrebbe andare all'estrema destra del suo genitore. Ma quanto è largo il genitore? Bene, * ampio quanto lo spazio occupato dai propri figli. * In altre parole, il genitore lascia la decisione della sua larghezza ai suoi figli. E i bambini non sono vincolati dai loro genitori, quindi vanno fino alla fine - che è il contenitore dei genitori. – ernes7a

+0

Buona spiegazione. Grazie! – Santosh

1

Questa linea rende il "Press Here" tasto (Button01) allineare a destra:

android:layout_alignParentRight="true" 

che rende il vostro layout di riempire il genitore in larghezza.

3

causa di avere una larghezza

 android:layout_alignParentLeft="true" 

un oggetto, e una larghezza

 android:layout_alignParentRight="true" 

un altro oggetto, il layout estende a entrambi i lati, dando il layout larghezza.

Ma quando si utilizza Layout_alignParentXXXXX e si inserisce il genitore WRAP_CONTENT, ciò consente ai bambini di andare al layout superiore con una larghezza definita.

+0

Grazie per la risposta, ma non è molto chiaro per me. Stai dicendo che se usiamo Layout_alignParentXXXX e la larghezza dei genitori è WRAP_CONTENT, allora la larghezza del layout superiore (genitore del genitore) è usata per il calcolo ?? è vero? – Santosh

+0

la mia esperienza me lo ha detto, ma puoi provarlo, mettendo un altro LinearLayout superiore con una larghezza per esempio di 50dip e vedere il risultato :) –

+0

Ho sperimentato un po 'e sembra che usiamo Layout_AlighParentRight con la larghezza del suo genitore come WRAP_CONTENT quindi la larghezza del layout superiore viene utilizzata per il calcolo (come hai fatto notare). Ma stiamo usando solo il layout_alignParentLeft, quindi funziona come previsto e la larghezza del layout non si estende allo schermo completo. Grazie per l'aiuto Quiroga! – Santosh

0

Un altro problema che potresti incontrare è che se imposti i tuoi 2 figli ad "allineare genitore giusto" + "wrap_content", e il tuo relativo layout a "wrap_content", e che il relativo layout è contenuto in uno schermo intero LinearLayout tuo parente il layout occuperà l'intera larghezza di LinearLayout.

Se lo si fa con "allinea genitore a sinistra", il relativo layout rimane sulla sinistra e la sua larghezza è in realtà un "contenuto a capo". Ma il comportamento è diverso per "allineare il genitore giusto", è un po 'strano.

Soluzione:

per risolvere il problema (ho dovuto allineare uno dei figli a destra), in realtà ho impostato le 2 bambini di "align genitore sinistra" e ha giocato con i bambini imbottitura al fine di prendi uno dei bambini posizionati nell'angolo in alto a destra. Questa è una soluzione sporca, ma l'unica che ho trovato per ora.

Possibili soluzioni più pulite:

Un altro trucco sarebbe quello di mettere 2 LinearLayout all'interno di un FrameLayout, poi mettere i vostri bambini veri in ogni LinearLayout, e giocare con la gravità di tali LinearLayout per posizionare i bambini nella posizione giusta .

  • RelativeLayout
    • LinearLayout
      • bambino 1 (wrap_content)
    • LinearLayout (gravità: in alto a destra)
      • bambino 2 (wrap_content)
Problemi correlati