У меня была такая же проблема.
Я пытался создать что-то похожее на это:
![enter image description here](https://i.stack.imgur.com/6uld5.png)
Но то, что я получал, было так:
![enter image description here](https://i.stack.imgur.com/Z1LyT.png)
ImageButton
растягивался горизонтально.
Все лучшие ответы не сработали для меня. Но я заметил, что люди упоминают layout_weight
, и просто из любопытства посмотрел на него и обнаружил следующее в Документах Android :
Вес макета
LinearLayout также поддерживает назначение веса отдельным детям с помощью атрибута android: layout_weight. Этот атрибут присваивает виду значение важности с точки зрения того, сколько места оно должно занимать на экране. Большее значение веса позволяет расширить его, чтобы заполнить все оставшееся пространство в родительском представлении. Дочерние представления могут указывать значение веса, и тогда любое оставшееся пространство в группе представлений присваивается детям в пропорции их заявленного веса. Вес по умолчанию - ноль.
Например, если есть три текстовых поля и два из них объявляют вес 1, а другому не присвоен вес, третье текстовое поле без веса не будет расти и будет занимать только область, требуемую его содержимым. Два других будут расширяться в равной степени, чтобы заполнить пространство, оставшееся после измерения всех трех полей. Если третьему полю присваивается вес 2 (вместо 0), то теперь оно объявляется более важным, чем оба остальных, поэтому оно получает половину от общего оставшегося пространства, в то время как первые два делят остальные равные
Таким образом, в принципе, если для элемента layout_width
установить значение 0, оно будет отображаться в соответствии с размерами его содержимого.
Если вы установите его на что-то еще, элемент будет бороться за дополнительное пространство в родительском элементе, который его содержит; с более взвешенными элементами, занимающими больше места.
Итак, когда я установил layout_width = 0
для обоих TextView
и ImageButton
в моем примере, ни один из них не занимает дополнительное пространство, и они оба сжимаются влево.
![enter image description here](https://i.stack.imgur.com/K1rjw.png)
Но когда я установил его на 1 для TextView
и 0 для ImageButton
, ImageButton
не займет больше места, чем требуется для его содержимого; в то время как TextView
занимает все дополнительное пространство и толкает ImageButton
вправо.
Просто так, как я этого хочу.
![enter image description here](https://i.stack.imgur.com/8R1Zn.png)
Первоначально произошло то, что для обоих элементов было установлено значение по умолчанию layout_weight
, равное 1, и, следовательно, оба равных конкурировали за дополнительное пространство.
![enter image description here](https://i.stack.imgur.com/7pDZP.png)