2012-01-02 23 views
5

Sto provando a creare un'interfaccia, in cui due o più pulsanti verranno visualizzati all'utente, se si fa clic su un pulsante, verranno visualizzati alcuni layout. Sto usando il SlidingDrawer per questo scopo.Android layout_width e layout_height, come funziona?

Bene, sono confuso da layout_width & layout_height proprietà.

Se si impostano le proprietà come di seguito, solo "Handle 1" viene visualizzato sullo schermo.

android:layout_width="fill_parent" android:layout_height="wrap_content" 

Onestamente dicendo: Io non ho abbastanza conoscenza di entrambe queste proprietà. Qualcuno può condividere la sua conoscenza su di loro?

main.xml:

<?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"> 

    <SlidingDrawer android:id="@+id/slidingDrawer1" 
      android:layout_width="fill_parent" android:layout_height="wrap_content" 
      android:handle="@+id/handle1" 
      android:content="@+id/content1"> 
       <Button android:text="Handle 1" android:layout_height="wrap_content" 
         android:layout_width="fill_parent" android:id="@+id/handle1"></Button> 
       <LinearLayout android:id="@+id/content1" 
         android:layout_width="fill_parent" android:layout_height="wrap_content" 
         android:orientation="vertical" android:gravity="center" 
         android:background="#FF444444"> 
         <Button android:text="Handle 1 Item 1" android:layout_height="wrap_content" 
           android:layout_width="wrap_content" android:id="@+id/item1"></Button> 
       </LinearLayout> 
    </SlidingDrawer> 

    <SlidingDrawer android:id="@+id/slidingDrawer2" 
      android:layout_width="fill_parent" android:layout_height="wrap_content" 
      android:handle="@+id/handle2" 
      android:content="@+id/content2"> 
       <Button android:text="Handle 2" android:layout_height="wrap_content" 
         android:layout_width="fill_parent" android:id="@+id/handle2"></Button> 
       <LinearLayout android:id="@+id/content2" 
         android:layout_width="fill_parent" android:layout_height="wrap_content" 
         android:orientation="vertical" android:gravity="center" 
         android:background="#FF444444"> 
         <Button android:text="Handle 2 Item 1" android:layout_height="wrap_content" 
           android:layout_width="wrap_content" android:id="@+id/item2"></Button> 
       </LinearLayout> 
    </SlidingDrawer>  
</LinearLayout> 
+5

Avete controllato [la documentazione] (http: // developer.android.com/reference/android/view/ViewGroup.LayoutParams.html#FILL_PARENT)? È piuttosto chiaro. –

+1

Buona domanda. Ero confuso su questo qualche mese fa quando ho iniziato. Dagli un paio di giorni e ne prenderai il tempo. – Reid

risposta

5

I layout_width e layout_height proprietà di una vista sono destinati ad essere utilizzati da contenitore principale. Alcuni contenitori ignorano uno o entrambi; la maggior parte li onoro. È necessario consultare la documentazione del contenitore (nel tuo caso, SlidingDrawer) per capire come verranno utilizzati i valori.

Non si visualizza il main.xml completo, quindi è difficile dire esattamente cosa non va. Aiuterebbe anche se hai postato un'immagine di ciò che è sbagliato.

EDIT

Dopo aver visto il layout completo, penso che il problema di fondo è che si sta utilizzando un LinearLayout per contenere i SlidingDrawers. Come nota docs for SlidingDrawer, devono essere in FrameLayout o RelativeLayout (in realtà, qualsiasi contenitore che consente a più viste di sedersi l'una sull'altra).

Un'altra possibilità è che il secondo SlidingDrawer venga posizionato direttamente sotto il primo. Prova a cambiare la dimensione del secondo pulsante (ad esempio, allunga il testo) e guarda se spunta da entrambi i lati del pulsante 1.

+0

Ho fornito il file main.xml completo, per favore vedi la mia domanda. –

+0

@YaqubAhmad - Ho aggiornato la mia risposta. –

+0

Grazie mille. Fammi controllare. –

4

fill_parent = match_parent, e significa che prende la larghezza o l'altezza (che mai immobile è in fase specificato come) del contenitore "genitore"

wrap_content significa che l'altezza o la larghezza assume l'altezza o la larghezza del "bambino"

si desidera utilizzare pesi invece di utilizzare match_parent o wrap_content tipicamente.

Quando si utilizzano i pesi, si desidera impostare la larghezza su 0 dpi.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/main" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" > 

    <LinearLayout 
    android:id="@+id/lowerLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="1.0" > 
      <LinearLayout 
      android:id="@+id/headerLayout" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:layout_weight=".7" > 
       <Button 
        android:id="@+id/previousMonthButton" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Previous" /> 

       <TextView 
        android:id="@+id/monthName" 
        android:layout_width="0dip" 
        android:layout_height="wrap_content" 
        android:text="Large Text" 
        android:layout_weight="1" 
        android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_horizontal" /> 

       <Button 
        android:id="@+id/nextMonthButton" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Next" /> 

      </LinearLayout> 

      <LinearLayout 
      android:id="@+id/lowerLayout3" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:layout_weight=".3" > 

       <Button 
        android:id="@+id/addEvent" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" /> 

      </LinearLayout> 

    </LinearLayout> 
    <LinearLayout 
    android:id="@+id/lowerLayout2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="1.0" > 

     <LinearLayout 
      android:id="@+id/monthView" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:layout_weight=".7" > 

     </LinearLayout> 

     <ListView 
      android:id="@+id/listView1" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight=".3" > 
     </ListView> 
    </LinearLayout> 

</LinearLayout> 
+0

Lo so, ma guardate il mio xml fornito, perché mostra solo "Handle 1", se viene applicata la regola precedente dovrebbe mostrare sia "Handle 1" che "Handle 2". –

+0

Stai compilando il genitore due volte. Prova a usare i pesi invece di impostare la larghezza del layout su fill_parent. Ricorda inoltre che fill_parent è deprecato; usa invece match_parent. Ho modificato la mia risposta in modo da poterti mostrare un esempio. – Reid

0

Penso che si stia tentando di aggiungere 2 cassetti scorrevoli.

La dimensione del SlidingDrawer definisce quanto spazio il contenuto occuperà una volta scivolato fuori così SlidingDrawer solito dovrebbe usare match_parent sia per la sua dimensionsin questo caso si sovrappongono altro modo non si può vedere il gestore 2.

Se si imposta la visibilità "persa" del primo SlidingDrawer, è possibile vedere l'Altro.

Aggiornamento

Ciao,

Prova questo codice aiuti voi

<?xml version="1.0" encoding="utf-8"?> 

<SlidingDrawer 
    android:id="@+id/slidingDrawer1" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="1" 
    android:content="@+id/content1" 
    android:handle="@+id/handle1" > 

    <Button 
     android:id="@+id/handle1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Handle 1" > 
    </Button> 

    <LinearLayout 
     android:id="@+id/content1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#FF444444" 
     android:gravity="center" 
     android:orientation="vertical" > 

     <Button 
      android:id="@+id/item1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Handle 1 Item 1" > 
     </Button> 
    </LinearLayout> 
</SlidingDrawer> 
+0

sì, voglio aggiungere più di un cassetto scorrevole, come risulta dalla mia domanda. Se si imposta la visibilità, il primo cassetto scorrevole diventerà invisibile. –

+0

@YaqubAhmad Controlla post aggiornato ... – loks

Problemi correlati