为什么使用layout_below搞乱了开始按钮的大小?

时间:2015-11-22 22:32:29

标签: android xml

我有以下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" />

然而,这会弄乱开始按钮的大小,为什么会发生这种情况?我该如何解决?提前谢谢。

1 个答案:

答案 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属性,但如果您想保持当前的布局实现,上述解决方案可能更清晰。