我有以下xml布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/light_blue"
tools:context=".StoppedActivity">
<TextView
android:id="@+id/totalTimeView"
android:layout_width="80dp"
android:layout_height="50dp"
android:layout_marginBottom="90dp"
android:layout_alignParentTop="true"
android:background="@android:color/white"
android:textColor="@color/started_black"
/>
<TextView
android:id="@+id/countDownView"
android:layout_below="@+id/totalTimeView"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/white_circle"
android:textColor="@color/started_black"
android:gravity="center"
android:textSize="65sp" />
<ImageButton
android:id="@+id/settings"
android:layout_width="60dp"
android:layout_height="50dp"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:src="@drawable/ic_settings_black_24dp"
android:scaleType="fitXY"
/>
<ImageButton
android:id="@+id/startButton"
android:background="@drawable/button_selector"
android:layout_width="360dp"
android:layout_height="70dp"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:layout_marginBottom="60dp" />
<ToggleButton
android:id="@+id/toggleSwitch"
android:background="@drawable/toggle_selector"
android:layout_centerInParent="true"
android:layout_below="@+id/countDownView"
android:layout_marginTop="40dp"
android:layout_width="300dp"
android:layout_height="50dp" />
</RelativeLayout>
目前它在Nexus 5X上正确显示所有内容,但在屏幕尺寸不同的设备中使用时,布局会搞乱。为了确保不会发生,我添加了一行
android:layout_below="@id/toggleSwitch"
到
<ImageButton
android:id="@+id/startButton"
android:background="@drawable/button_selector"
android:layout_width="360dp"
android:layout_height="70dp"
android:layout_alignParentBottom="true"
android:layout_below="@id/toggleSwitch"
android:layout_centerInParent="true"
android:layout_marginBottom="60dp" />
然而,这会弄乱开始按钮的大小,为什么会发生这种情况?我该如何解决?提前谢谢。
答案 0 :(得分:3)
这是因为你告诉你的布局按钮将填充"@id/toggleSwitch
底部(下面的内容)和父布局底部之间的可用空间(因为您指定了android:layout_alignParentBottom="true"
)
相反,您可以定义填充切换开关和按钮之间空间的空白视图,这样就不会弄乱按钮高度:
<ToggleButton
android:id="@+id/toggleSwitch"
android:background="@drawable/toggle_selector"
android:layout_centerInParent="true"
android:layout_below="@+id/countDownView"
android:layout_marginTop="40dp"
android:layout_width="300dp"
android:layout_height="50dp" />
<View
android:layout_width="1dp"
android:layout_height="1dp"
android:background="@android:color/transparent"
android:layout_below="@id/toggleSwitch"
android:layout_above="@+id/startButton"/>
<ImageButton
android:id="@id/startButton"
android:background="@drawable/button_selector"
android:layout_width="360dp"
android:layout_height="70dp"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:layout_marginBottom="60dp" />
根据您要实现的目标,您可能需要调整代码。但是如果你想用可用的垂直空间填充一个垂直的空白区域(我理解你正在努力使你的布局适应不同的手机),这是一种方法。或者,您可以在屏幕底部使用LinearLayout并使用layout_weight
属性,但如果您想保持当前的布局实现,上述解决方案可能更清晰。