保证金不会影响“包含”

时间:2012-08-14 07:52:57

标签: android android-layout

我有文章的观点。它使用“include”,我试图在它们之间留一点余地。但是,“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>

6 个答案:

答案 0 :(得分:70)

您应在android:layout_width标记中添加android:layout_heightinclude属性。否则,不考虑边距。

  

但是,如果要使用<include>标记覆盖布局属性,则必须覆盖android:layout_heightandroid:layout_width才能使其他布局属性生效。

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

答案 1 :(得分:10)

我遇到了同样的问题,Kamen Goranchev的答案对我不起作用。

我在布局编辑器中使用了ADT的功能“Extract include ...”来提取一些常用的徽章作为TextView元素的列表。因此,Extract-include-tool将我的TextView-Elements包装在 merge-tag 中,这通常没问题。

但是,根据我在第888行https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/LayoutInflater.java#L888中看到的沸水的非常有用的源代码链接,只有在包含没有merge-tag的情况下,才会解析include-tag本身的布局属性。作为其根元素。

所以我从include中删除了merge-tag,并使用了另一个ViewGroup-tag,例如: FrameLayout里。然后include-tag中的边距按预期工作。

答案 2 :(得分:7)

include标记支持以下属性:

  1. 您可以覆盖的任何android:layout_*属性。

  2. android:id属性。

  3. layout属性。
  4. android:visibility属性。

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

答案 3 :(得分:3)

另一种解决方案是在Space之前添加include

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

答案 4 :(得分:1)

必须在其他布局中插入包含内容。

例如相对布局

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="15dp">

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            layout="@layout/sub_edit_new_customer" />

    </RelativeLayout>

答案 5 :(得分:0)

就我而言,我通过添加一些填充来解决了这个问题。

您要包含的布局:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="15dp"> <!-- add padding here -->

        <!-- your custom layout -->

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>