【问题标题】:RelativeLayout, how to align center of other view?RelativeLayout,如何对齐其他视图的中心?
【发布时间】:2016-08-18 02:11:31
【问题描述】:

我创建了这些视图

<View
    android:id="@+id/a"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@color/opaque_red" />
<View
    android:id="@+id/b"
    android:layout_width="20dp"
    android:layout_height="20dp"
    android:layout_alignBottom="@id/a"
    android:layout_toRightOf="@id/a"
    android:background="@color/opaque_red" />
<View
    android:id="@+id/c"
    android:layout_width="20dp"
    android:layout_height="20dp"
    android:layout_alignBottom="@id/a"
    android:layout_toLeftOf="@id/a"
    android:background="@color/opaque_red" />

我怎样才能与此保持一致?

我不能使用其他布局来包裹这三个视图,因为我将使用OnTouchListener 移动a 视图,位置计算将基于a。如果换成其他布局,计算难度很大。

【问题讨论】:

    标签: android android-layout android-relativelayout


    【解决方案1】:

    将 b 和 c 对齐到 a 的底部或顶部,然后将 15dp marin 分别添加到 b 和 c 的底部或顶部。因为您的视图具有硬编码的大小,所以这很有效。

    基本上

    margin = ((a.height - b.height) / 2)
    

    另一种方法是将它们包含在设置为 wrap_content 或 a 的高度的相对布局中,并将 b 和 c 与垂直中心对齐,但你说你不希望这样。

    【讨论】:

    • 其实就是三个没有大小的wrap_content ImageView,我只是硬编码了问题的大小
    • 无论大小,算法都成立。同样无论如何,如果你将它们包装在一个布局中,它会变得更容易。
    【解决方案2】:

    将父布局的高度设置为wrap_content,然后将子布局居中:

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <View
            android:id="@+id/a"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_centerInParent="true"
            android:background="@android:color/holo_green_light" />
        <View
            android:id="@+id/b"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@id/a"
            android:background="@android:color/darker_gray" />
        <View
            android:id="@+id/c"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@id/a"
            android:background="@android:color/darker_gray" />
    
    </RelativeLayout>
    

    【讨论】: