相对布局中缺少项目
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。
您可能还想在视图中为这些元素考虑一个网格视图,因为它会为您完成所有这些对齐工作。
【讨论】:
非常感谢您的提示,非常有帮助!以上是关于相对布局中缺少项目的主要内容,如果未能解决你的问题,请参考以下文章