ViewGroup match_parent внутри wrap_content
Существует один LinearLayout с параметрами макета wrap_content. У меня есть несколько представлений внутри него с параметром match_parent. Давайте взглянем.
Случай 1:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="#990000"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="#004400">
</RelativeLayout>
</LinearLayout>
введите описание изображения здесь
Случай 2:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="#990000"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="150dp"
android:text="What a terrible failure!"
android:background="#009900"/>
</LinearLayout>
введите описание изображения здесь
Случай 3:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="#990000"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="#000099"/>
</LinearLayout>
Вот ожидаемое поведение. Вид нарисован. Я не могу опубликовать третье изображение из-за менее чем 10 репутации. Спасибо stackru!:)
Все примеры тестируются на реальном устройстве, а не только в Android Studio Preview.
Из android Develop -> Руководства по API -> Пользовательский интерфейс -> Layouts: wrap_content - говорит вашему виду, чтобы он соответствовал размерам, требуемым его содержимым
Рассматривая второй случай. Я все еще могу понять, что кнопка имеет контент, и родительский вид принимает только текст кнопки и отступы - это "контент".
Но как насчет первого случая? Ребенок ясно говорит, что "я хочу нарисовать с match_parent". Я понимаю, что RelativeLayout не имеет дочерних элементов, но он не должен беспокоить родительский контейнер или это так?
Или, если Android пытается перейти на более низкий уровень, запрашивая "размер контента" (OnMeasure), то зачем нам устанавливать ширину. Если он такой умный и решит все за меня?
Что именно здесь происходит? Я не понимаю. Почему это сердце?
1 ответ
Это не будет беспокоить. Ширина дочернего элемента в первом случае будет такой же, как и у его родителя, потому что вы установили для match_parent значение родительского элемента ширины wrap_content. И высота дочернего элемента будет такой же маленькой / большей, чем родительская, потому что вы указываете точное значение для высоты.