对于非常糟糕的标题,我不知道该怎么称呼这个问题。我想要做的是:有RelativeLayout
有两个孩子:
layout_centerInParent="true"
layout_alignParentBottom="true"
但是,当设备处于横向模式时,元素(1)在元素(2)下稍微 或。但是,元素(1)在其上方有足够的空间出现高于元素(2)。我如何制作布局,以便如果屏幕太小而不能使元素(1)居中并使两个元素不重叠,那么将元素(1)对齐(如在layout_above
)元素(2)?
答案 0 :(得分:2)
这应该可以为您提供一个布局,text1
项填充text2
上方的可用空间,并在该空间中垂直和水平居中;并且text2
位于底部,水平居中。
<LinearLayout
android:orientation="vertical"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TextView
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="Centered"
android:gravity="center_vertical|center_horizontal"
/>
<TextView
android:id="@android:id/text2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Bottom"
android:gravity="center_horizontal"
/>
</LinearLayout>
重要部分为android:layout_weight
,并与android:gravity
结合。
答案 1 :(得分:1)
如果您的元素(1)资源不是太多,那么这里的左侧建议可能会有效。
有两个版本的元素(1),第一个带有layout_centerInParent="true"
,第二个带有layout_above="@id\element2"
。将它们默认为android:visibility="invisible"
。在onCreate Post a Runnable中检查两个元素的Y维度,并在具有最小值的元素上设置View.VISIBLE
。
答案 2 :(得分:1)
新想法:
这是另一种想法,它的解决方法不是很优雅,但它非常简单。将元素(1)放在它自己的&lt; LinearLayout&gt;配置如下:
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" // More on this line below
android:layout_alignParentTop="true"
android:layout_above="@id/element2"
android:gravity="center">
线性布局将始终从屏幕顶部跨越到元素(2)的上方,并且由于其重力是“中心”,因此元素(1)将始终位于可用空间的中间。注意:行android:layout_height="..."
是必需的,但似乎没有做任何事情。无论是fill_parent还是wrap_content,其高度都被将其顶部锚定到ParentTop并将其底部锚定到element(2)的行覆盖。但是,没有该行会使其因运行时异常而崩溃。
原创,不太好主意:
另一种不太理想的解决方案是使用两个布局文件。将纵向布局xml放在布局文件夹中,将横向布局放在名为layout-land的新文件夹中。 Android然后根据手机的方向自动选择正确的一个。我认为您可以使用layout-port
,但将纵向放在layout
中可确保它知道默认使用哪一个。