切换元素未在分配的 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>
gravity
和 layout_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>
希望对您有所帮助
创建 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>
gravity
和 layout_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>
希望对您有所帮助