Вы можете сделать это, задав View
s layout_width
из 0dp
и layout_weight
из 1
:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:layout_width="0dp"
android:text="example text"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
Способ работы layout_weight для Android таков:
- Во-первых, он смотрит на размер, который обычно занимает View, и резервирует это пространство.
- секунды, если макет равен
match_parent
, то он разделит оставшееся пространство на соотношение layout_weight
с. Таким образом, если вы задали просмотры layout_weight="2"
и layout_weight="1"
, результирующее соотношение будет 2 к 1, то есть: первое представление получит 2/3 оставшегося пространства, а другое представление 1 / 3.
Так вот почему, если вы дадите layout_width
размер 0dp
, первый шаг не будет иметь дополнительного значения, поскольку обоим представлениям не назначено никакого пространства. Тогда только вторая точка определяет пространство, которое получает каждый View
, тем самым давая View
s пространство, которое вы указали в соответствии с соотношением!
Чтобы объяснить, почему 0dp
приводит к одинаковому разделению пространства, приведем пример, демонстрирующий обратное: Приведенный ниже код приведет к чему-то другому, поскольку example text
теперь имеет ширину, превышающую 0dp
потому что он имеет wrap_content
, вместо этого оставляя свободное пространство для деления менее 100%, потому что текст занимает место. В результате у них останется 50% свободного места, но текст уже занял некоторое пространство, поэтому TextView
будет иметь значительно больше 50% от общего пространства.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:layout_width="wrap_content"
android:text="example text"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>