LinearLayout внутри RelativeLayout использует super-parent в качестве родителя - PullRequest
2 голосов
/ 28 ноября 2011

У меня есть следующий макет:

<LinearLayout width:fill height:fill >
  <RelativeLayout width:fill height:wrap >
    <ImageView width:fill height:wrap >
    <LinearLayout width:wrap height:wrap />
  </RelativeLayout>
</LinearLayout>

Внутренний LinearLayout, похоже, не подозревает, что он находится внутри RelativeLayout, когда речь идет о вертикальных свойствах. Гравитация работает только горизонтально. Для всех намерений и целей (по вертикали) внутренний LinearLayout считает, что внешний LinearLayout является его родителем. Выравнивание родительского Top / Bottom растягивает его и RelativeLayout для заполнения внешнего LinearLayout.

В конечном счете, я хочу, чтобы относительная высота макета обернула изображение почти так же, как если бы оно было его фоном (хотя оно должно быть наложением поверх другого вида поверх фона), и линейное расположение для просто работайте внутри ограничений относительного макета.

Кроме того, я хочу иметь возможность обрезать все, что выходит за пределы относительного макета, обертывающего изображение. Какой мой лучший вариант здесь?

Ответы [ 2 ]

2 голосов
/ 28 ноября 2011

Я думаю, что ваша проблема здесь в том, что wrap_content не ограничивает верхний предел View (по крайней мере, родителем). Таким образом, высота вашего RelativeLayout может достигать полного размера его родителя. Если бы его родитель тоже не был wrap_content, он простирался бы до своего родителя и т. Д., Пока не достигнет родителя с верхней границей.

В этом случае ваш старший родитель ограничен размером телефона, поэтому он на этом останавливается. Вместо использования силы тяжести на вашем самом внутреннем LinearLayout. Используйте атрибут layout_centerInParent="true" на самом внутреннем LinearLayout. Если макет не станет больше вашего ImageView, он должен соответствовать центру вашего RelativeLayout.

EDIT: Вы также можете поэкспериментировать с различными типами шкал ImageView. Есть такие, которые будут масштабировать изображение настолько большим, насколько это возможно, без обрезки или искажения соотношения. Некоторые из них всегда будут заполнять весь вид, но могут обрезать или искажать изображение.

1 голос
/ 28 ноября 2011

Из вашего сообщения многое неясно, возможно, вам следует опубликовать полную версию XML-кода.

Насколько я понимаю, вы не используете ограничения RelativeLayout, такие как layout_alignParentBottom="true" или layout_centerVertical="true". Они будут работать, в отличие от гравитационных свойств.

...