为什么RelativeLayout没有使用layout_centerInParent视图强制执行layout_alignLeft?

时间:2017-02-22 15:49:56

标签: android relativelayout

为什么(地狱)RadioButton左边缘是否与灰色方形左边缘正确对齐?

这是RelativeLayout某种限制或错误,导致无法将视图与以父级为中心的另一个视图对齐吗?

什么是最干净的解决方法?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/holo_orange_dark">

    <View
        android:id="@+id/square"
        android:layout_width="200dip"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:background="@android:color/darker_gray"/>

    <RadioButton
        android:layout_alignLeft="@id/square"
        android:text="Radio button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_blue_light"/>

    <View
        android:layout_width="300dp"
        android:layout_height="20dp"
        android:layout_centerInParent="true"
        android:background="@android:color/holo_green_light"
        />

</RelativeLayout>

screenshot from AS 2.2.3 Layout Editor. Android API: 25

3 个答案:

答案 0 :(得分:2)

您需要将ViewRadioButton包裹在RelativeLayout中。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@android:color/holo_orange_dark">

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true">

    <View
        android:id="@+id/square"
        android:layout_width="200dip"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:background="@android:color/darker_gray"/>

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_blue_light"
        android:text="Radio button"/>
</RelativeLayout>

<View
    android:layout_width="300dp"
    android:layout_height="20dp"
    android:layout_centerInParent="true"
    android:background="@android:color/holo_green_light"
    />

答案 1 :(得分:1)

由于相对布局宽度wrap_content

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/holo_orange_dark">

<View
    android:id="@+id/square"
    android:layout_width="200dip"
    android:layout_height="200dp"
    android:layout_centerInParent="true"
    android:background="@android:color/darker_gray"/>

<RadioButton
    android:layout_alignLeft="@+id/square"
    android:layout_alignStart="@+id/square"
    android:text="Radio button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/holo_blue_light"/>

<View
    android:layout_width="300dp"
    android:layout_height="20dp"
    android:background="@android:color/holo_green_light"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

答案 2 :(得分:0)

RadioButton元素缺少android:layout_centerInParent="true"以使其保持在屏幕中心或使用android:layout_centerHorizontal="true"以下代码为centerInParent

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/holo_orange_dark">

  <View
      android:id="@+id/square"
      android:layout_width="200dip"
      android:layout_height="200dp"
      android:layout_centerInParent="true"
      android:background="@android:color/darker_gray"/>

  <RadioButton
      android:layout_alignLeft="@id/square"
      android:text="Radio button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerInParent="true"
      android:background="@android:color/holo_blue_light"/>

  <View
      android:layout_width="300dp"
      android:layout_height="20dp"
      android:layout_centerInParent="true"
      android:background="@android:color/holo_green_light"
      />

</RelativeLayout>