【发布时间】:2013-09-15 03:14:16
【问题描述】:
当您将视图与布局一侧对齐时,我注意到 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:谁能解释行为差异和相反的负边际效应?
【问题讨论】:
标签: android android-layout android-relativelayout android-framelayout