相对布局中缺少项目

Posted

技术标签:

【中文标题】相对布局中缺少项目【英文标题】:Missing items in a Relative Layout 【发布时间】:2014-02-26 17:42:13 【问题描述】:

我需要在 android XML 的 2x3 网格中放置六个块。我正在使用的视图位于RelativeLayout 内部,而RelativeLayout 位于另一个RelativeLayout 内部。下面我的代码中显示的六个视图没有产生任何错误,但只显示了其中的四个(左下角的两个缺失)。我认为这可能与我使用 layout_below 和 layout_toRightOf 的方式有关,但我无法弄清楚到底出了什么问题。这是我的代码,问题在于 xml 末尾的六个视图。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:background="#000000" >

<!-- / / / / / / / / / / / / / Borders / / / / / / / / / / / / / / / -->

 <View
    android:id="@+id/topBorder"
    android:layout_
    android:layout_
    android:background="#01FF70"
    android:layout_alignParentTop="true"
    android:visibility="invisible" />

<View
    android:id="@+id/bottomBorder"
    android:layout_
    android:layout_
    android:background="#FFDC00"
    android:layout_alignParentBottom="true"
    android:visibility="invisible" />

<View
    android:id="@+id/leftBorder"
    android:layout_
    android:layout_
    android:background="#FF851B"
    android:layout_alignParentLeft="true" />

<View
    android:id="@+id/rightBorder"
    android:layout_
    android:layout_
    android:background="#85144B"
    android:layout_alignParentRight="true"/>


<!-- / / / / / / / / / / / / / Left Panel / / / / / / / / / / / / / / / -->

<LinearLayout
    android:id="@+id/leftPanel"
    android:layout_below="@+id/topBorder"
    android:layout_toRightOf="@+id/leftBorder"
    android:layout_
    android:layout_
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/icon"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:src="@drawable/spongebob" />

    <TextView
        android:id="@+id/txt_name"
        android:layout_
        android:layout_
        android:minLines="3"
        android:maxLines="3"
        android:text="Insert text here insert text here insert text here insert text"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/txt_size"
        android:layout_marginTop="-7dp"
        android:layout_
        android:layout_
        android:minLines="1"
        android:maxLines="1"
        android:text="$3.00"
        android:textSize="30sp" />

</LinearLayout>

<View
    android:id="@+id/divider"
    android:layout_toRightOf="@id/leftPanel"
    android:background="#FFFFFF"
    android:layout_
    android:layout_
    android:layout_marginTop= "30dp" />


<!-- / / / / / / / / / / / / / Right Panel / / / / / / / / / / / / / / -->

<RelativeLayout
    android:id="@+id/rightContainer"
    android:layout_toRightOf="@+id/divider"
    android:layout_
    android:layout_ >

    <View
        android:id="@+id/calorieBlock"
        android:layout_
        android:layout_
        android:layout_marginLeft="25dp"
        android:layout_marginTop="15dp"
        android:background="#ffffff" />

    <View
        android:id="@+id/carbBlock"
        android:layout_
        android:layout_
        android:layout_toRightOf="@+id/calorieBlock"
        android:layout_marginLeft="25dp"
        android:layout_marginTop="15dp"
        android:background="#ffffff" />

    <View
        android:id="@+id/tfatBlock"
        android:layout_
        android:layout_
        android:layout_toRightOf="@+id/carbBlock"
        android:layout_marginLeft="25dp"
        android:layout_marginTop="15dp"
        android:background="#ffffff" />

    <View
        android:id="@+id/proteinBlock"
        android:layout_
        android:layout_
        android:layout_below="@+id/calorieBlock"
        android:layout_marginLeft="25dp"
        android:layout_marginTop="15dp"
        android:background="#ffffff" />

    <View
        android:id="@+id/sfatBlock"
        android:layout_
        android:layout_
        android:layout_toRightOf="@+id/proteinBlock"
        android:layout_marginLeft="25dp"
        android:layout_marginTop="15dp"
        android:background="#ffffff" />

    <View
        android:id="@+id/sugarBlock"
        android:layout_
        android:layout_
        android:layout_below="@+id/tfatBlock"
        android:layout_marginLeft="25dp"
        android:layout_marginTop="15dp"
        android:background="#ffffff" />

</RelativeLayout>
</RelativeLayout>

【问题讨论】:

请发布您的完整 xml 代码 我刚刚对其进行了编辑以包含完整的 xml 代码。 【参考方案1】:

查看此代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rightContainer"
android:layout_
android:layout_
android:orientation="horizontal" >

<View
    android:id="@+id/calorieBlock"
    android:layout_
    android:layout_
    android:layout_marginLeft="25dp"
    android:layout_marginTop="15dp"
    android:background="#000000" />

<View
    android:id="@+id/carbBlock"
    android:layout_
    android:layout_
    android:layout_marginLeft="25dp"
    android:layout_marginTop="15dp"
    android:layout_toRightOf="@id/calorieBlock"
    android:background="#000000" />

<View
    android:id="@+id/tfatBlock"
    android:layout_
    android:layout_
    android:layout_marginLeft="25dp"
    android:layout_marginTop="15dp"
    android:layout_toRightOf="@id/carbBlock"
    android:background="#000000" />

<View
    android:id="@+id/proteinBlock"
    android:layout_
    android:layout_
    android:layout_below="@id/calorieBlock"
    android:layout_marginLeft="25dp"
    android:layout_marginTop="15dp"
    android:background="#000000" />

<View
    android:id="@+id/sfatBlock"
    android:layout_
    android:layout_
    android:layout_below="@id/carbBlock"
    android:layout_marginLeft="25dp"
    android:layout_marginTop="15dp"
    android:layout_toRightOf="@id/proteinBlock"
    android:background="#000000" />

<View
    android:id="@+id/sugarBlock"
    android:layout_
    android:layout_
    android:layout_below="@id/tfatBlock"
    android:layout_marginLeft="25dp"
    android:layout_marginTop="15dp"
    android:layout_toRightOf="@id/sfatBlock"
    android:background="#000000" />

</RelativeLayout>

【讨论】:

完全做到了,谢谢!你知道为什么有必要为每个元素同时做“below”和“toRightOf”吗? 本给出了答案【参考方案2】:

如果您要使用相对布局,您应该指定尽可能多的关系。例如,sFatBlock 应该在 carbBlock 下方以及蛋白质块的右侧。现在您只指定每个块的 x 或 y。

您还应该将您的视图与父级对齐。所以第一行应该都有 alignParentTop 为真。第一列应该有 alignParentLeft = true。

您可能还想在视图中为这些元素考虑一个网格视图,因为它会为您完成所有这些对齐工作。

【讨论】:

非常感谢您的提示,非常有帮助!

以上是关于相对布局中缺少项目的主要内容,如果未能解决你的问题,请参考以下文章

了解自动布局中的乘数以使用相对定位

添加约束时缺少自动布局“安全区域”

Android之相对布局

在相对布局下方的相对布局中显示按钮

flex盒子布局

Android相对布局放置问题