Андроид: макет начального вопроса
Когда у меня есть следующее, он показывает верхний макет с четырьмя цветами имеет гораздо меньшую площадь, чем нижняя область макета.
Согласно http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout, когда вы добавляете больше в layout_weight, он должен увеличить область, но она уменьшается в коде.
Любая помощь будет оценена.
Спасибо заранее.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="4">
<TextView
android:text="red"
android:gravity="center_horizontal"
android:background="#aa0000"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="3"/>
<TextView
android:text="green"
android:gravity="center_horizontal"
android:background="#00aa00"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"/>
<TextView
android:text="blue"
android:gravity="center_horizontal"
android:background="#0000aa"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"/>
<TextView
android:text="yellow"
android:gravity="center_horizontal"
android:background="#aaaa00"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"/>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<TextView
android:text="row one"
android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:text="row two"
android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:text="row three"
android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:text="row four"
android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
Ответы
Ответ 1
У меня была та же проблема. Хитрость заключается не в том, чтобы использовать "wrap_content" или "fill_parent" для элементов управления, для которых вы устанавливаете вес. Вместо этого установите layout_height в 0px (когда внутри вертикального макета), а затем дочерние элементы управления будут распределены по весовым значениям.
Ответ 2
Если вы получили ошибку как
Ошибка
Подозрительный размер: это сделает вид невидимым, вероятно, предназначенным для макета...
не забудьте установить правильный параметр на
android:orientation
в родительском
Ответ 3
Если вы используете fill_parent в LinearLayout, макет займет как можно больше места, и все элементы макета, определенные позже, будут иметь дело с оставшимся пространством.
Если вы установите высоту обоих из вас LinearLayouts на wrap_content, вес должен работать как задокументированный.
Ответ 4
Я знаю, что это поздно, но, надеюсь, это помогает людям:
Используйте android:weightSum
для родителя. Вот ссылка на dev docs.
http://developer.android.com/reference/android/widget/LinearLayout.html#attr_android:weightSum
Используйте android:weightSum
из 1.0
для родителя, а затем используйте 0.x
в дочерних представлениях с android:layout_weight
, чтобы использовать это соотношение пространства.
Ответ 5
Основываясь на том, что сказал Януш, если вы используете fill_parent, вы можете установить android: layout_weight, чтобы "разделить" всю область между несколькими элементами макета.
Макет_средства не увеличивает область, он увеличивает ее "право" на область. но и относительно родителя. Если у вас есть родительский элемент с layout_height = fill_parent, с layout_weight = 0, а у родителя есть брат с тем же, установка layout_weight = 1 для одного из дочерних элементов не влияет на родителя.
Как родительский, так и родственный брат будут занимать 50% доступной области, которую они могут заполнить.
Ответ 6
Решение состоит в том, чтобы установить layout_height в 0px при использовании layout_weight.
Но почему вы наблюдаете это, по-видимому, странное/обратное поведение?
В ближайшее время: оставшееся пространство отрицательное, и поэтому ребенок с весом 4 получает больше отрицательного пространства, а высота уменьшается.
Подробнее:
Предположим, что высота вашего родительского вертикального макета составляет 100 пикселей.
Высота макета для каждого дочернего элемента fill_parent
(то есть каждый ребенок также имеет высоту 100 пикселей)
Общая высота всего ребенка = 2 * 100 пикселей
Оставшаяся высота = 100 - (2 * 100) = -100 пикселей (отрицательная)
Теперь позвольте распределить эту оставшуюся высоту между дочерними. Первый получит большую часть: 80% (т.е. -100 * 4/(4 + 1)). Второй ребенок получает 20% (т.е. -100 * 1/(4 + 1))
Теперь вычислите полученную высоту:
ребенок 1:100 + (-80) = 20px
ребенок 2: 100 + (-20) = 80px
Ничего странного здесь, только математика. Просто имейте в виду, что оставшееся пространство может быть отрицательным! (или установите высоту явно в 0, как рекомендуется)
Ответ 7
В свойствах линейного макета измените ширину макета на "fill_parent"
вместо "wrap_content"
надеюсь, что это поможет.
Ответ 8
Если ориентация linearlayout является вертикальной, установите layout_height как 0dp. В случае горизонтальной компоновки установите layout_width как 0dp.
Если мы не следуем вышеприведенным правилам, представление имеет тенденцию занимать пространство в соответствии с указанными атрибутами и, следовательно, выравнивание не соответствует ожиданиям.