Android中RelativeLayout中的视图宽度和高度始终为零

Posted

技术标签:

【中文标题】Android中RelativeLayout中的视图宽度和高度始终为零【英文标题】:View width and height is always zero in RelativeLayout in Android 【发布时间】:2016-08-07 04:27:01 【问题描述】:

我正在开发一个 android 应用程序。在我的应用程序中,我试图在图像上设置叠加层。但是,即使我将 match_parent 设置为宽度和高度,相对布局中视图的大小也始终为零。

这是我的 XML 布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_marginTop="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:layout_
    android:id="@+id/di_card_container"
    android:layout_>

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_>

        <ImageView
            android:id="@+id/di_iv_image"
            android:scaleType="centerCrop"
            android:layout_
            android:layout_ />

        <RelativeLayout
            android:layout_alignParentLeft="true"
            android:layout_alignParentBottom="true"
            android:id="@+id/di_name_container"
            android:layout_
            android:layout_>
            <View
                android:layout_centerInParent="true"
                android:background="@color/blue"
                android:id="@+id/destination_item_overlay"
                android:layout_
                android:layout_/>
            <TextView
                android:padding="10dp"
                android:textSize="15dp"
                android:textColor="@color/white"
                android:id="@+id/di_tv_name"
                android:layout_
                android:layout_ />
        </RelativeLayout>
    </RelativeLayout>
</android.support.v7.widget.CardView>

这是结果

如您所见,名称没有蓝色背景,因为相对布局中视图的宽度和高度为零。但是,如果我像下面那样明确设置宽度和高度,它就可以工作。

 <View
                    android:layout_centerInParent="true"
                    android:background="@color/blue"
                    android:id="@+id/destination_item_overlay"
                    android:layout_
                    android:layout_/>

但它并不兼容所有设备。为什么 with 和 height 总是为零?我添加该视图是因为我需要以编程方式控制该视图。如何设置该背景视图的宽度和高度以匹配父视图?

【问题讨论】:

【参考方案1】:

那是因为你有一个循环依赖。 &lt;RelativeLayout&gt; 要求它的孩子说出高度,&lt;View&gt; 告诉它的父母让它和他一样高。如果我们修复了高度,我们可以立即解决问题。

在这里试试这个:

        <RelativeLayout
            android:layout_alignParentLeft="true"
            android:layout_alignParentBottom="true"
            android:id="@+id/di_name_container"
            android:layout_
            android:layout_>
            <View
                android:layout_centerInParent="true"
                android:background="@color/blue"
                android:id="@+id/destination_item_overlay"
                android:layout_
                android:layout_alightTop="@id/di_tv_name"
                android:layout_alightBottom="@id/di_tv_name"
                android:layout_/>
            <TextView
                android:padding="10dp"
                android:textSize="15dp"
                android:textColor="@color/white"
                android:id="@+id/di_tv_name"
                android:layout_
                android:layout_ />
        </RelativeLayout>

【讨论】:

酷。很高兴能帮上忙

以上是关于Android中RelativeLayout中的视图宽度和高度始终为零的主要内容,如果未能解决你的问题,请参考以下文章

Android中RelativeLayout中的视图宽度和高度始终为零

自定义ListView的RelativeLayout中的Android布局居中

RelativeLayout 中的 Android 重力中心不像 LinearLayout 那样工作

将视图附加到Android中的自定义RelativeLayout

Android - fill_parent 在RelativeLayout 中的行为不符合预期

RelativeLayout中include 控件覆盖重叠的问题