切换元件不是在分配的空间内水平对齐

时间:2017-02-09 23:17:26

标签: android xml android-layout android-relativelayout android-percent-library

创建cata后,我注意到尽管设置属性,ana控件仍未水平对齐中心。可以做些什么来解决这个问题?我尝试使用cata,但这似乎不起作用。

PercentRelativeLayout

1 个答案:

答案 0 :(得分:3)

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

简单示例:

<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都不会影响开关的位置 - 它与右侧对齐。 可以用FrameLayout替换LinearLayout,结果将是相同的。 要理解为什么会发生这种情况,应该尝试在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>

希望有所帮助