RelativeLayout
当您将视图与布局的一侧(任何一侧)对齐并且在同一方向上具有较大的边距时,我注意到了一种奇怪的行为。
我有 2 个RelativeLayouts
,每个都包含一个简单的视图。在一种布局中,视图与顶部和左侧对齐,在另一种布局中与底部和右侧对齐:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_marginTop="110dp"
android:layout_gravity="center"
android:background="#ff555555" >
<View
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:background="#aa8711" />
</RelativeLayout>
<RelativeLayout
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_marginBottom="110dp"
android:layout_gravity="center"
android:background="#ff555555" >
<View
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:background="#998877" />
</RelativeLayout>
</FrameLayout>
它看起来像这样:
我在父对齐的每个方向上添加了 130dp 的边距。这意味着视图应该在布局中仅部分可见。这就是发生的事情:
如您所见,视图现在小于原始大小,因为它们被推到了布局的“墙壁”上。接下来,我尝试提供比布局更大的边距,因此我在对齐的方向上给了它们 151dp 的边距。它看起来像这样:
右下对齐的视图现在“突破”了布局,并且再次与原来的大小相同。另一方面,左上对齐的视图也处于其原始大小,但完全在布局内部而不是在布局外部。
我已经单独尝试过这个,并且在对齐的每一个排列中都得到了相同的结果。
问题一:谁能解释这种不一致的行为?
我尝试了同样的事情,这次将行为与FrameLayout
. 最初设定:
在边距之后:
始终将FrameLayout
视图保持在其原始大小,并简单地让视图“退出”它。我试图在至少应该在视图之外的视图大小的相反方向上给出负边距,并看到与默认情况下RelativeLayout
发生的相同行为。FrameLayout
问题 2:谁能解释行为差异和相反的负边际效应?