android xml没有考虑自定义布局的边距

时间:2017-05-31 16:45:12

标签: android android-layout android-custom-view

这是我的自定义视图( custom_view.xml ): *请注意,我在CardView上定义了3个边距。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    android:background="@color/white"
    android:orientation="vertical"
    app:cardCornerRadius="4dp"
    app:cardElevation="0dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="16dp"
        android:background="@color/white">

        <ImageView
            android:id="@+id/left_image"
            android:layout_width="64dp"
            android:layout_height="40dp"
            android:layout_marginTop="5dp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toEndOf="@id/left_image"
            android:layout_toLeftOf="@+id/right_image"
            android:layout_toRightOf="@id/left_image"
            android:layout_toStartOf="@id/right_image"
            android:orientation="vertical">

            <com.ringapp.ui.view.TypefaceTextView
                android:id="@+id/title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

            <com.ringapp.ui.view.TypefaceTextView
                android:id="@+id/description"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
              />

        </LinearLayout>

        <ImageView
            android:id="@id/right_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_marginTop="5dp"
            android:src="@drawable/icon_md_gray_arrow" />

    </RelativeLayout>
</android.support.v7.widget.CardView>

我在以下xml( container.xml )上添加自定义布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    android:orientation="vertical">

    <com.ringapp.ui.view.CustomView
        android:id="@+id/test2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        app:description="edsc"
        app:title="title" />

    <com.ringapp.ui.view.CustomView
        android:id="@+id/test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        app:description="asdasd"
        app:title="asdasdasd" />

</LinearLayout>

问题是我在custom_view.xml上定义的边距没有出现在container.xml布局上。为什么会这样?如果我将custom_view.xml的代码直接粘贴到container.xml上,则会出现边距。

1 个答案:

答案 0 :(得分:0)

而不是

<com.ringapp.ui.view.CustomView
    android:id="@+id/test2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

试试这个:

<include layout="@layout/custom_view" android:id="@+id/test2/>

我相信当你使用你拥有的代码时,android会尝试覆盖你视图的某些属性,特别是当你明确覆盖布局宽度/高度时。尝试使用上面的代码代替您的代码。此外,如果您要打包内容,则无需覆盖布局宽度/高度,因为布局维度将从您的custom_view中提取。

编辑:为了澄清,如果您取消布局宽度/高度覆盖,您的代码甚至可能会起作用。但是,在将其他XML布局引入不同的XML布局时,应该使用includes。你'包含'你的视图的方式很好,但是当你编写扩展android'View'的自定义视图类时,应该可以使用它。