2013-10-23 13 views
11

Tworzę dynamicznie widoki zawierające LinearLayout i dodajemy je do zewnętrznego LinearLayout. Chciałbym ustawić margines wokół utworzonych widoków, ale layout_margin w pliku XML jest ignorowane. Działa, jeśli ustawię parametry w kodzie, ale chciałbym określić margines w układzie XML.Margines zignorowany przez LinearLayout

Ustawianie marginesu w układzie XML będą ignorowane:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="20dp" 
    android:orientation="vertical" > 

    ... 
</LinearLayout> 

Ustawianie marginesu podczas tworzenia się zaszczycony:

LinearLayout productView = (LinearLayout) getLayoutInflater().inflate(R.layout.product_preview, null); 

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
params.setMargins(50, 50, 50, 50); 
productView.setLayoutParams(params); 

Jest to układ zewnętrzny. Widoki są dodawane do dealer_activity_product_list.

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/dealer_activity_dealer_image" 
     android:layout_width="match_parent" 
     android:layout_height="150dp" 
     android:contentDescription="@string/dealer_activity_dealer_image_desc" /> 

    <TextView 
     android:id="@+id/dealer_activity_dealer_address" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <LinearLayout 
      android:id="@+id/dealer_activity_product_list1" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:orientation="vertical" /> 

     <LinearLayout 
      android:id="@+id/dealer_activity_product_list2" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:orientation="vertical" /> 
    </LinearLayout> 
</LinearLayout> 

+0

Czy próbowałeś za pomocą Hierarchia widza? lub próbowałeś zrzucić widok do uiautomator? Za pomocą tych narzędzi możesz sprawdzić swoje układy. Czy możesz opublikować pełny kod, którego używasz? – Tobrun

+0

Czy mógłbyś dodać więcej kodu? Jak kompletny XML? Myślę, że ustawiłeś margines na niewłaściwy element. –

+0

Użyłem HierachyViewer do sprawdzenia układu. Podczas ustawiania marginesu w kodzie jest odzwierciedlone w atrybutach układu nie mogę znaleźć wartości ustawione w pliku XML. – multiholle

Odpowiedz

-2

ustawione padding zamiast layout_margin w widoku zewnętrznym.

nadzieję, że będzie pracować

+1

Spowoduje to ustawienie spacji wokół wszystkich widoków zawartych w widoku zewnętrznym, ale nie pomiędzy zawartymi widokami. – multiholle

1

Czy ustawienie atrybutu dla wewnętrznej LinearLayout lub zawierającej LinearLayout? Przynajmniej następujące działa wewnątrz LinearLayout:

<TextView 
    android:id="@+id/xxx" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="20sp" 
    android:layout_margin="10dp" 
    /> 
+0

Jestem pewien, że autor ustawia margines dla zewnętrznego układu. Atrybut xmlns ma zastosowanie tylko do elementów root –

+0

Ustawiam atrybut dla 'LinearLayout', który jest zawarty w innym' LinearLayout'. – multiholle

-1

Istnieje powszechne „zagnieżdżone układy” wzór. Oznacza to, że tworzysz pomocniczy układ kontenera i osiągasz pożądany efekt umieszczając układ wewnętrzny w układzie kontenera.

Sortowanie:

<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_margin="20dp" 
     > 
    ... 
    </LinearLayout> 
</LinearLayout> 
+0

To znaczy, właśnie to robię i to nie działa. – multiholle

+0

Czy jest to pojedynczy układ lub dwa układy zagnieżdżone, które można programowo dodać do układu zewnętrznego? – 18446744073709551615

+0

To znaczy, mogę uwierzyć, że 'android: layout_margin' jest ignorowany dla układu będącego źródłem XML, ale nie spodziewałbym się, że' android: layout_margin' pracował normalnie dla wewnętrznych układów (proszę sprawdzić, czy to działa w twoim środowisko), chyba że element macierzysty tego wewnętrznego układu został dodany programowo do elementu nadrzędnego. – 18446744073709551615