2012-01-02 14 views
5

Próbuję utworzyć interfejs, w którym dwa lub więcej przycisków zostanie wyświetlone użytkownikowi, jeśli kliknięty zostanie przycisk, wyświetlone zostaną mu niektóre układy. Używam do tego celu SlidingDrawer.Android layout_width & layout_height, jak to działa?

Cóż, jestem zdezorientowany przez layout_width & właściwości layout_height.

Jeśli ustawię właściwości jak poniżej, tylko "Uchwyt 1" jest wyświetlany na ekranie.

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

Szczerze mówiąc, nie mam wystarczającej wiedzy na temat obu tych właściwości. Czy ktoś może podzielić się swoją wiedzą na jego temat?

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

Czy sprawdziłeś [dokumentacja] (http: // developer.android.com/reference/android/view/ViewGroup.LayoutParams.html#FILL_PARENT)? To całkiem jasne imho. –

+1

Dobre pytanie. Byłem zmieszany z tym kilka miesięcy temu, kiedy zacząłem. Daj mu kilka dni, a zrozumiesz to. – Reid

Odpowiedz

5

W layout_width i layout_height właściwości widokiem mają być wykorzystane przez opakowanie macierzystego. Niektóre kontenery ignorują jedno lub oba z nich; najbardziej je czcij. Musisz zapoznać się z dokumentacją kontenera (w twoim przypadku, SlidingDrawer), aby zrozumieć, w jaki sposób będą używane wartości.

Nie wyświetlasz kompletnego pliku main.xml, więc trudno powiedzieć dokładnie, co się dzieje. Pomoże Ci również, jeśli opublikujesz obraz tego, co jest nie tak.

EDIT

Po obejrzeniu kompletnego układu, myślę, że podstawowym problemem jest to, że używasz LinearLayout aby zawierać SlidingDrawers. Jako uwaga docs for SlidingDrawer muszą znajdować się w FrameLayout lub RelativeLayout (w rzeczywistości każdy kontener, który pozwala wielu widokom siedzieć jeden na drugim).

Inną możliwością jest umieszczenie drugiego SlidingDrawera bezpośrednio pod pierwszym. Spróbuj zmienić rozmiar drugiego przycisku (np. Wydłuż tekst) i sprawdź, czy wystaje z obu stron przycisku 1.

+0

Podałem kompletny plik main.xml, zobacz moje pytanie. –

+0

@YaqubAhmad - zaktualizowałem swoją odpowiedź. –

+0

Wielkie dzięki. Pozwól, że to sprawdzę. –

4

fill_parent = match_parent, a to oznacza, że ​​przyjmuje szerokość lub wysokość (które zawsze Obiekt jest on określony jako) z „macierzystego” pojemnika

wrap_content oznacza, że ​​wysokość lub szerokość odbywa się na wysokości lub szerokości „dziecko”

chcesz używać ciężarów zamiast korzystania match_parent lub wrap_content zwykle.

Kiedy używasz odważników, chcesz ustawić szerokość na 0dp.

<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

Wiem o tym, ale spójrz na mój dostarczony xml, dlaczego pokazuje on tylko "Handle 1", jeśli powyższa reguła zostanie zastosowana, powinna pokazywać zarówno "Handle 1" i "Handle 2". –

+0

Dwa razy wypełniasz rodzica. Spróbuj użyć wag, zamiast ustawiać szerokość układu na fill_parent. Należy również pamiętać, że fill_parent jest przestarzałe; zamiast tego użyj match_parent. Zmieniłem moją odpowiedź, aby pokazać ci przykład. – Reid

0

Myślę, że próbujesz dodać 2 przesuwane szuflady.

Rozmiar SlidingDrawer określa, ile miejsca zajmie zawartość po przesunięciu, więc SlidingDrawer powinien zazwyczaj używać match_parent dla obu wymiarów w tym przypadku jeden pokrywa się z drugim, więc nie można zobaczyć handler'a 2.

Jeśli ustawisz widoczność "gone" pierwszego SlidingDrawer, zobaczysz Other.

Aktualizacja

Cześć,

Spróbuj tego kodu może pomóc

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

Tak, chcę dodać więcej niż jedną przesuwaną szufladę, co wynika z mojego pytania. Jeśli utracę widoczność, pierwsza wysuwana szuflada stanie się niewidoczna. –

+0

@YaqubAhmad Sprawdź zaktualizowany post ... – loks

Powiązane problemy