Я заметил странное поведение в 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: Может ли кто-нибудь объяснить разницу в поведении и противоположный эффект отрицательного поля?