我正在尝试使用RelativeLayout在一个简单的对话框中显示一个由方向按钮包围的地图图块。
我尝试了一些变化,但不可避免地,我的一些按钮丢失了。
在此版本的示例中,缺少up
和left
按钮。如果我先声明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>
答案 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而不是centerHorizontal,并使用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>