2010-10-25 19 views
0

我想用RelativeLayout在一个简单的对话框中显示一个由方向按钮包围的地图块。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> 

回答

0

小部件确实需要声明才能被引用,至少在Android 2.2之前。你可以尝试像下面,我不能确定你是如何想的输入/输出按钮放置,但是这应该给一个总体思路:

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

基本上,你要放置箭头和/先出按钮,与父母对齐(主窗口)。然后,使用上面的/ 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> 
+0

一个有用的建议,因为它使我重新考虑我应该如何分析RelativeLayouts ...但它也导致了使用的布局去全屏幕(在必要的'fill_parent'的组合的对话框布局以及方向按钮粘在两侧的事实)。 – 2010-10-25 13:47:07

+0

这是由此产生的截图:http://emberapp.com/paour/images/kcoppock – 2010-10-25 13:47:34

+0

啊,这确实有道理。虽然有截图很有用。您是否尝试将RelativeLayou更改为wrap_content?我认为这不会解决问题,但值得尝试。稍后我会看看我不能提出更好的解决方案。 – kcoppock 2010-10-25 14:09:20