Почему кнопки растягиваются, чтобы покрыть все выделенные макеты

Я пытаюсь выровнять 3 кнопки (влево, в центре, вправо). Я знаю, что это можно сделать с помощью гравитации, но я пробовал понять концепцию layout_weight здесь. Я использую этот код:

<LinearLayout id=.. layout_width = "wrap_content" layout_height = "wrap_content" orientation="Horizonta" > <Button id=1 layout_width = "wrap_content" layout_height = "wrap_content" layout_weight = "1" text= "text" /> <Button id=2 layout_width = "wrap_content" layout_height = "wrap_content" layout_weight = "1" text= "text" /> <Button id=3 layout_width = "wrap_content" layout_height = "wrap_content" layout_weight = "1" text= "text" /> </LinearLayout> 

Тем не менее, я получаю ТОП-часть изображения ниже. Что правильно. Вопрос в том, почему кнопка растягивается, чтобы покрыть всю область, в которой она была выделена, когда я использую wrap_content? Как это сделать, как изображение BOTTOM?

Введите описание изображения здесь

спасибо

Макет layout_weight используется для указания того, как дополнительное свободное пространство на экране должно быть разделено среди виджетов. В этом случае у нас есть три кнопки с одинаковым layout_weight и, следовательно, кнопки будут одинаково расти, пока все свободное пространство не исчезнет.

Должен попробовать что-то еще, чтобы получить кнопки оригинального размера и выравнивание, что мы хотим (слева направо – вправо). Одна из проблем заключается в том, что горизонтальный LinearLayout не полностью совместим, когда речь заходит о соблюдении параметров layout_gravity. Мы сможем использовать параметры layout_gravity, которые влияют на вертикальное выравнивание, но горизонтальные игнорируются родительским LinearLayout, вздыхают еще один тупик.

Решение состоит в том, чтобы поместить что-то между кнопкой, которая подталкивает их в нужное место на экране. Представление Space было введено в API 14 (Ice Cream Sandwich) и подходит для этого.

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Space android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight = "1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Space android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight = "1" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> 

Представления Space также могут быть заменены несколькими пустыми TextViews, чтобы заставить проект работать на устройствах, которые запускают более ранние уровни API.

 <TextView android:id="@+id/textView1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="" /> 

Когда используется вес, макет-макет является оммитированным и используется только алгоритм веса, а затем растягивается элемент.

Ваши кнопки заполняют пробел, потому что вы используете layout_weight="1" который сообщает кнопкам, чтобы получить дополнительное пространство, также потому, что атрибут layout_weight равен 1 для всех кнопок, они будут иметь одинаковое пространство и иметь одинаковый размер. Вы не можете получить этот нижний макет с помощью layout_weight , используйте layout_gravity для их размещения (вот еще один вопрос об этом. Что означает android: layout_weight? ).

Если вы хотите, чтобы следующее изображение попыталось:

 <LinearLayout id=.. layout_width = "wrap_content" layout_height = "wrap_content" orientation="Horizonta" > <Button id=1 layout_width = "wrap_content" layout_height = "wrap_content" android:layout_gravity="left" text= "text" /> <Button id=2 layout_width = "wrap_content" layout_height = "wrap_content" android:layout_gravity="center_horizontal" text= "text" /> <Button id=3 layout_width = "wrap_content" layout_height = "wrap_content" android:layout_gravity="right" text= "text" /> </LinearLayout>