Android RelativeLayout layout_toLeftOf无法按预期工作

时间:2012-01-11 14:52:01

标签: android relativelayout

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

     <!-- LEFT -->
    <FrameLayout 
        android:layout_marginTop="50px"
        android:layout_marginLeft="50px"
        android:layout_width="50px"
        android:layout_height="50px"
        android:background="#ff0000"
        android:id="@+id/lp" />

    <FrameLayout 
        android:layout_width="50px" 
        android:layout_height="100px" 
        android:background="#00ff00"
        android:layout_toRightOf="@id/lp"
        android:layout_alignTop="@id/lp"
        android:id="@+id/lc" />        
    <!-- END LEFT -->

    <!-- RIGHT -->
    <FrameLayout 
        android:layout_marginTop="50px"
        android:layout_marginLeft="300px"
        android:layout_width="50px"
        android:layout_height="50px"
        android:background="#ff0000"
        android:id="@+id/rp" />

    <FrameLayout 
        android:layout_width="50px" 
        android:layout_height="100px" 
        android:background="#00ff00"
        android:layout_toLeftOf="@id/rp"
        android:layout_alignTop="@id/rp"
        android:id="@+id/rc" />        
    <!-- END LEFT -->    
</RelativeLayout>

结果是:

enter image description here

我的期望是:

enter image description here

为什么不起作用?

2 个答案:

答案 0 :(得分:1)

以下是我的答案:

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

     <!-- LEFT -->
    <View
        android:layout_alignParentLeft="true"
        android:layout_marginTop="50dp"
        android:layout_marginLeft="50dp"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="#ff0000"
        android:id="@+id/lp" />

    <View 
        android:layout_width="50dp" 
        android:layout_height="100dp" 
        android:background="#00ff00"
        android:layout_toRightOf="@id/lp"
        android:layout_alignTop="@id/lp"
        android:id="@+id/lc" />        
    <!-- END LEFT -->

    <!-- RIGHT -->
    <View
        android:layout_alignParentRight="true" 
        android:layout_marginTop="50dp"
        android:layout_marginRight="50dp"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="#ff0000"
        android:id="@+id/rp" />

    <View 
        android:layout_width="50dp" 
        android:layout_height="100dp" 
        android:background="#00ff00"
        android:layout_toLeftOf="@id/rp"
        android:layout_alignTop="@id/rp"
        android:id="@+id/rc" />        
    <!-- END LEFT -->    
</RelativeLayout>

不要使用px。使用dip / dp(独立像素)。另外,要创建彩色块,您只需要一个View,但这取决于它们的内容。

阅读本教程我发现它对布局非常有用 - http://www.learn-android.com/2010/01/05/android-layout-tutorial/5/

答案 1 :(得分:0)

来自 android:layout_toLeftOf 定义: 将此视图的右边缘定位在给定锚点视图ID的左侧。 适应此视图的右边距以及锚点视图的左边距。

所以,神奇的是没有边距的假视图:

  <View 
    android:id="@+id/ltEdge"
    android:layout_height="match_parent"
    android:layout_width="0dp"
    android:layout_alignLeft="@id/lp"        
      />

  <View
    android:layout_width="50px" 
    android:layout_height="100px" 
    android:background="#00ff00"
    android:layout_toRightOf="@id/ltEdge"
    android:layout_alignTop="@id/lp"
    android:id="@+id/lc" />