<?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”??
有人知道发生了什么吗?
提前谢谢!
答案 0 :(得分:4)
RelativeLayout要求您指定布局中元素的位置。我没有看到任何layout_below或layout_toLeftOf标签。重力适用于LinearLayouts。通常,LinearLayouts更易于使用,并且它们可以更好地扩展到不同的屏幕尺寸。我建议你用LinearLayout替换RelativeLayout,用LinearLayout替换FrameLayout。如果要使用多个重叠布局,则通常使用FrameLayout。
我建议您仔细阅读Android sdk参考文档中的布局,例如:http://bit.ly/djmnn7
答案 1 :(得分:1)
您为fill_parent
的{{1}}和layout_width
指定了layout_height
,因此它填写了它的父视图。
默认情况下,无论您使用RelativeLayout
大小,相对布局都会将其子项排列到左上角。
您应该利用fill_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" />
即可实现此目的。如果此属性设置为true,则将此子项水平和垂直居中于其父级。