2
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frameLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background_gradient" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center" >

        <ImageButton
            android:id="@+id/buttonLog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/log"
            android:onClick="log" />

    </RelativeLayout>

</FrameLayout>

我期待我的按钮出现在屏幕中央。但是,它出现在屏幕的 TOP 中心(即按钮水平居中,而不是垂直居中)。

在我看来,RelativeLayout 的行为就像是用“wrap_content”而不是“fill_parent”定义的。

有趣的是,如果我为我的 RelativeLayout 高度属性 (android:layout_height) 赋予一个实际值,例如:

<RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="100dp"
        android:gravity="center" >

然后按钮行为正确(即按钮也垂直居中)。但我不想使用实际值。我想使用fill_parent!为什么它不适用于“fill_parent”?

有人知道发生了什么吗?

先感谢您!

4

2 回答 2

4

RelativeLayout 要求您指定元素在 Layout 中的位置。我没有看到任何 layout_below 或 layout_toLeftOf 标签。重力适用于线性布局。一般来说,LinearLayouts 更容易使用,并且它们可以更好地扩展到不同的屏幕尺寸。我建议您将 RelativeLayout 替换为 LinearLayout,并将 FrameLayout 替换为 LinearLayout。如果您想使用多个重叠布局,您通常会使用 FrameLayout,但您不会这样做。

我建议您阅读 Android sdk 参考文档中的使用布局,例如:http: //bit.ly/djmn7

于 2012-06-01T03:34:21.940 回答
1

您为您的和指定fill_parent了,因此它填充了它的父视图。默认情况下,无论您使用大小,相对布局都会将其子级排列到左上角。layout_widthlayout_heightRelativeLayoutfill_parent

您应该通过利用RelativeLayout's自己的属性集来实现所需的方面,这有助于您将子视图对于彼此或它们的父视图排列:

<ImageButton
    android:id="@+id/buttonLog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:background="@drawable/log"
    android:onClick="log" />

使用android:layout_centerInParent你可以实现这一点。如果此属性设置为 true,则该子项在其父项中水平和垂直居中。

于 2012-06-01T03:43:27.527 回答