RelativeLayout将视图设置在居中视图的右侧

时间:2013-01-30 19:44:08

标签: android android-layout alignment relativelayout

我尝试将视图设置在第一个视图的右侧,并将它们底部对齐在RelativeLayout中。

以下代码在我看来应该可以正常工作。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="#999999"
    android:padding="10dp" >

    <View
        android:id="@+id/v1"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:background="#FFFFFF" />

    <View
        android:id="@+id/v2"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignBottom="@id/v1"
        android:layout_toRightOf="@id/v1"
        android:background="#FF0000" />

</RelativeLayout>

但结果并不是我所期望的。

Result

这里有什么问题?

为了清楚我的期望:两个立方体应该彼此底部对齐,红色立方体应该在白色立方体的右边(外部)。

修改

我发现了这个问题。它不是这个布局,而是包含它的父列表(它是一个专有的Horizo​​ntalListView)。它似乎以某种方式调整其子视图的大小并导致问题。

3 个答案:

答案 0 :(得分:1)

它对我有用。我的猜测是,无论你正在测试什么,sp都是从默认的sp = dp缩小。这将使你的dp填充推动块,因为灰色和白色块之间的可用空间量是:

(300-200)/2 - 10 = 40

你的红色区块是50。

如果你想要更一致的结果使用dp,因为sp会根据偏好进行缩放,通常用于文本缩放。

答案 1 :(得分:1)

请勿使用sp作为单位。请尝试使用dp(设备像素)。这将考虑设备。在您的情况下,图像没有正确缩放,因此这个结果。您还可以在视图v2上设置重力。类似的东西:

android:gravity="botton|right"

或者您也可以尝试将基线设置为:

android:layout_alignBaseline="@+id/v1"

并将alignRight设置为:

android:layout_alignRight="@+id/v1"

答案 2 :(得分:0)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="300dp"
                android:layout_height="300dp"
                android:background="#999999"
                android:padding="10dp" >

    <View
            android:id="@+id/v1"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_centerInParent="true"
            android:background="#FFFFFF" />

    <View
            android:id="@+id/v2"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:background="#FF0000" 
            android:layout_alignBottom="@+id/v1" 
            android:layout_alignBaseline="@+id/v1"
            android:layout_alignRight="@+id/v1"/>

</RelativeLayout>

enter image description here

我是对的吗? ;)