2012-08-14 17 views
33

Tengo una vista con artículos. Utiliza "incluir", y estoy tratando de hacer un pequeño margen entre ellos. Sin embargo, "android: layout_marginTop" no parece tener ningún impacto en el diseño.El margen no afecta en "incluir"

¿Qué estoy haciendo mal?

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" >  
    <include android:id="@+id/article1" layout="@layout/mainarticle" /> 
    <include android:id="@+id/article2" android:layout_marginTop="10dip" layout="@layout/article" /> 
    <include android:id="@+id/article3" android:layout_marginTop="10dip" layout="@layout/article" /> 
    <include android:id="@+id/article4" android:layout_marginTop="10dip" layout="@layout/article" /> 
    <include android:id="@+id/article5" android:layout_marginTop="10dip" layout="@layout/article" />  
</LinearLayout> 

Respuesta

61

debe agregar el android:layout_width y android:layout_height atributos en la etiqueta include. De lo contrario, los márgenes no se toman en consideración.

Sin embargo, si desea anular los atributos de diseño utilizando la etiqueta <include>, debe invalidar tanto android:layout_height y android:layout_width a fin de que otros atributos de diseño para tener efecto.

https://developer.android.com/training/improving-layouts/reusing-layouts.html#Include

+2

+1 su truco funciona bien –

+2

extraño, pero cierto .. thnx –

+1

Esto sólo funciona si el propio XML incluir no tiene la combinación -tag como elemento raíz, vea mi respuesta a continuación. –

7

include ayuda de la etiqueta debajo de propiedades:

  1. Cualquier androide: layout_* atributos que se pueden sobrescribir.

  2. android:id atributo.

  3. layout atributo.
  4. android:visibility atributo.

Etc: include android:id=”@+id/news_title” android:layout_width=”match_parent” android:layout_height=”match_parent” layout=”@layout/title”/>

favor, lea: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/LayoutInflater.java#L777
http://developer.android.com/training/improving-layouts/reusing-layouts.html

+0

Gracias por el enlace, muy útil para mi respuesta a continuación. ¡Vota tu respuesta para eso! –

7

que tenían el mismo problema y la respuesta de Kamen Goranchev no funciona para mí.

He utilizado la función de ADT "Extraer incluido ..." del editor de diseño para extraer algunas insignias usadas comúnmente como una lista de elementos TextView. Entonces, la herramienta Extract-include-form envolvió mis TextView-Elements en una merge-tag, que por lo general estaría bien.

Pero, de acuerdo con el enlace de código fuente de agua hervida que veo en la línea 888 https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/LayoutInflater.java#L888, los atributos de diseño de la etiqueta de inclusión solo se analizan si la inclusión no tiene la etiqueta merge como su raíz -elemento.

Así que eliminé la etiqueta merge del include y usé otra etiqueta ViewGroup como, p. Ej. FrameLayout. Luego, los márgenes en la etiqueta de inclusión funcionan como se esperaba.

1

Otra solución sería añadir Space antes include:

<Space 
     android:layout_height="8dp" 
     android:layout_width="match_parent" /> 
Cuestiones relacionadas