RelativeLayout不会显示我的所有小部件

时间:2010-10-25 11:59:57

标签: android user-interface layout

我正在尝试使用RelativeLayout在一个简单的对话框中显示一个由方向按钮包围的地图图块。

我尝试了一些变化,但不可避免地,我的一些按钮丢失了。

在此版本的示例中,缺少upleft按钮。如果我先声明up按钮并将tile按钮放在相对位置,则会显示up。 RelativeLayouts是否需要首先声明最顶层的小部件?猜不是,layout_above然后就没有用了......

我无法发布图片(低代表),但您可以查看结果here

<?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"
    >

<ImageView
        android:id="@+id/tile"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5px"
        android:layout_centerInParent="true"
        android:src="@drawable/loading"
        />

<Button
        android:id="@+id/up"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/tile"
        android:layout_centerHorizontal="true"
        android:drawableLeft="@drawable/up"
        />
<Button
        android:id="@+id/left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/tile"
        android:layout_centerVertical="true"
        android:drawableLeft="@drawable/left"
        />
<Button
        android:id="@+id/right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/tile"
        android:layout_centerVertical="true"
        android:drawableLeft="@drawable/right"
        />
<Button
        android:id="@+id/down"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tile"
        android:layout_centerHorizontal="true"
        android:drawableLeft="@drawable/down"
        />

<Button
        android:id="@+id/in"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tile"
        android:layout_alignParentLeft="true"
        android:text="@string/test_in"
        />
<Button
        android:id="@+id/out"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tile"
        android:layout_alignParentRight="true"
        android:text="@string/test_out"
        />
</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

小部件实际上需要在引用之前声明,至少在Android 2.2之前。您可以尝试类似下面的内容,我不确定您希望如何放置In / Out按钮,但这应该提供一个大致的想法:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<Button 
    android:id="@+id/up" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" 
    android:drawableLeft="@drawable/up" 
    /> 
<Button 
    android:id="@+id/left" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true" 
    android:drawableLeft="@drawable/left" 
    /> 
<Button 
    android:id="@+id/right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true" 
    android:drawableLeft="@drawable/right" 
    /> 
<Button 
    android:id="@+id/down" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true" 
    android:drawableLeft="@drawable/down" 
    /> 
<Button 
    android:id="@+id/in" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true" 
    android:text="@string/test_in" 
    /> 
<Button 
    android:id="@+id/out" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true" 
    android:text="@string/test_out" 
    />
<ImageView 
    android:id="@+id/tile" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="5px" 
    android:layout_above="@id/down"
    android:layout_toRightOf="@id/left"
    android:layout_toLeftOf="@id/right"
    android:layout_below="@id/up"
    android:layout_gravity="center"
    android:src="@drawable/loading" 
    /> 
</RelativeLayout>

基本上,您要先放置箭头和进/出按钮,与父窗口(主窗口)对齐。然后,使用above / below / RightOf / LeftOf定义地图图块的边缘。我不确定ImageView是使用layout_gravity还是只是引力(我总是让它们感到困惑),但如果没有,请尝试另一个。这是我的头脑 - 未经测试 - 所以,如果有些奇怪的事情发生,请告诉我。

编辑:第二个建议。这与你的更相似(我没想到地图不是fill_parent),而是使用gravity而不是centerHorizo​​ntal,并使用layout_above / below / left / right而不是alignParent * *

<RelativeLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >   
<ImageView  
    android:id="@+id/tile"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_margin="5px"  
    android:gravity="center"
    android:src="@drawable/loading"  
    />  
<Button  
    android:id="@+id/up"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_above="@id/tile"
    android:gravity="center_horizontal"  
    android:drawableLeft="@drawable/up"  
    />  
<Button  
    android:id="@+id/left"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_toLeftOf="@id/tile"
    android:gravity="center_vertical"
    android:drawableLeft="@drawable/left"  
    />  
<Button  
    android:id="@+id/right"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_toRightOf="@id/tile"
    android:gravity="center_vertical"
    android:drawableLeft="@drawable/right"  
    />  
<LinearLayout
    android:id="@+id/bottom"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/tile"
    android:gravity="center_horizontal"
    >   
<Button  
    android:id="@+id/out"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:text="@string/test_out"  
    android:padding="5dp"
    />
<Button  
    android:id="@+id/down"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:drawableLeft="@drawable/down"  
    android:padding="5dp"
    /> 
<Button  
    android:id="@+id/in"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:text="@string/test_in"  
    android:padding="5dp"
    />
</RelativeLayout>