2012-08-14 12 views
33

Ho una vista con gli articoli. Usa "include", e sto cercando di fare un piccolo margine tra di loro. Tuttavia, "android: layout_marginTop" non sembra avere alcun impatto sul layout.Il margine non ha impatto in "include"

Cosa sto sbagliando?

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

risposta

61

è necessario aggiungere gli attributi android:layout_width e android:layout_height nel tag include. In caso contrario, i margini non vengono presi in considerazione.

Tuttavia, se si desidera sovrascrivere gli attributi di layout utilizzando il tag <include>, è necessario eseguire l'override sia android:layout_height e android:layout_width in ordine per altri layout di attributi per avere effetto.

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

+2

+1 vostro trucco funziona bene –

+2

strano, ma vero .. thnx –

+1

Questo funziona solo se il include-XML stesso non ha l'unione -tag come elemento-radice, vedi la mia risposta qui sotto. –

7

include supporto per i tag sotto proprietà:

  1. Qualsiasi Android: layout_* attributi che è possibile sovrascrivere.

  2. attributo android:id.

  3. attributo layout.
  4. attributo android:visibility.

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

Si prega di leggere: 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

Grazie per il link, molto utile per la mia risposta qui sotto! Hai aumentato la tua risposta per questo! –

7

Ho avuto lo stesso problema e la risposta da Kamen Goranchev non funziona per me.

Ho utilizzato la funzione di ADT "Estrai include ..." dall'editor di layout per estrarre alcuni badge di uso comune come elenco di elementi TextView. Quindi lo strumento estrai include i miei elementi TextView in un tag di unione , che di solito andrebbe bene.

Ma, secondo l'utilissimo collegamento a codice sorgente da acqua bollita che vedo nella riga 888 https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/LayoutInflater.java#L888, gli attributi di layout dal tag include stesso vengono analizzati solo se l'inclusione non ha il tag di merge come radice -elemento.

Quindi ho rimosso il tag di unione dall'inclusione e ho utilizzato un altro tag ViewGroup come ad es. FrameLayout. Quindi i margini nel tag include funzionano come previsto.

1

Un'altra soluzione sarebbe quella di aggiungere Space prima include:

<Space 
     android:layout_height="8dp" 
     android:layout_width="match_parent" /> 
Problemi correlati