2012-08-14 3 views
33

У меня есть вид со статьями. Он использует «включить», и я пытаюсь сделать небольшое преимущество между ними. Тем не менее, «android: layout_marginTop», похоже, не влияет на макет.Маржа не влияет на «включить»

Что я делаю неправильно?

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

ответ

61

Вы должны добавить атрибуты android:layout_width и android:layout_height в include теге. В противном случае поля не принимаются во внимание.

Однако, если вы хотите, чтобы переопределить расположение атрибутов с помощью <include> тега, вы должны переопределить как android:layout_height и android:layout_width для того, чтобы другие атрибуты макета вступил в силу.

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

+2

+1 ваш трюк отлично –

+2

странно, но верно работает .. Thnx –

+1

Это работает только если сам включать-XML не имеет слияния -tag как корневой элемент, см. мой ответ ниже. –

7

include Поддержка тегов ниже свойств:

  1. Любой андроид: layout_* атрибуты, которые вы можете перезаписывать.

  2. android:id атрибут.

  3. layout атрибут.
  4. android:visibility атрибут.

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

Пожалуйста, прочитайте: 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

Благодарим вас за ссылку, очень полезную для ответа ниже! Отправил свой ответ за это! –

7

У меня была такая же проблема, и ответ от Камне Goranchev не работает для меня.

Я использовал функцию ADT «Извлечь ...» из редактора макетов, чтобы извлечь некоторые обычно используемые значки в виде списка элементов TextView. Таким образом, инструмент Extract-include-wrap обернул мои элементы TextView в теге merge-tag, который обычно был бы прекрасен.

Но, в соответствии с очень полезной исходной кодовой ссылкой из кипяченой воды, я вижу строку 888 https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/LayoutInflater.java#L888, атрибуты компоновки из самого тега include обрабатываются только в том случае, если в include нет тега merge-tag как его корень -элемент.

Так что я удалил тэг слияния из include и использовал другой тег ViewGroup, например, например. FrameLayout. Затем поля в теге include работают как ожидалось.

1

Другим решением было бы добавить Space до того include:

<Space 
     android:layout_height="8dp" 
     android:layout_width="match_parent" /> 
Смежные вопросы