切换元素未在分配的 space 内水平居中对齐

Switch element not centre aligning horizontally within allocated space

创建 PercentRelativeLayout 后,我注意到尽管设置了属性,SwitchCompat 控件仍未水平居中对齐。可以做些什么来解决这个问题?我尝试使用 android:layout_centerHorizontal="true",但这似乎不起作用。

<android.support.percent.PercentRelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="10"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp">
    <ImageView
        android:id="@+id/imageView1"
        app:layout_widthPercent="40%"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:src="@drawable/ic_image1" />

    <android.support.v7.widget.SwitchCompat
        android:id="@+id/switch_map_emiratesairline_emiratesgreenwichpeninsula"
        app:layout_widthPercent="20%"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:theme="@style/Theme.AppCompat.Light"
        android:background="@android:color/transparent"
        android:layout_toEndOf="@id/imageView1"/>

    <ImageView
        android:id="@+id/imageView2"
        app:layout_widthPercent="40%"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:src="@drawable/ic_image2"
        android:layout_toEndOf="@id/switch_tgl"/>
</android.support.percent.PercentRelativeLayout>

它可能看起来像一个错误,但实际上它与 SwitchCompat 无关(因为 Switch 也重现了这个问题。 但它也与 PercentRelativeLayout 无关。甚至与 RelativeLayout 无关。 它与宽度不同于 wrap_content 的开关有关(据我所知)。

简单示例:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center">

    <android.support.v7.widget.SwitchCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"/>
</FrameLayout>

gravitylayout_gravity 都不会影响开关的位置 - 它向右对齐。 可以用 LinearLayout 替换 FrameLayout,结果是一样的。 要理解为什么会发生这种情况,应该尝试在 Switch/SwitchCompat 源代码中找到答案(抱歉,我还没有尝试这样做...)

因此,要解决您的问题,我唯一能想出的办法就是破解:用一些布局包装 SwitchCompat。并使用 wrap_content 作为 SwitchCompat 宽度。

<android.support.percent.PercentRelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="10"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp">
    <ImageView
        android:id="@+id/imageView1"
        app:layout_widthPercent="40%"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:src="@drawable/avatar" />

    <FrameLayout
        android:id="@+id/switch_tgl"
        app:layout_widthPercent="20%"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:layout_toRightOf="@id/imageView1">
        <android.support.v7.widget.SwitchCompat
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:theme="@style/Theme.AppCompat.Light"
            android:background="@android:color/transparent" />
    </FrameLayout>

    <ImageView
        android:id="@+id/imageView2"
        app:layout_widthPercent="40%"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:src="@drawable/avatar"
        android:layout_toRightOf="@id/switch_tgl"/>
</android.support.percent.PercentRelativeLayout>

希望对您有所帮助