Android горизонтальный LinearLayout не ставит элементы в ряд
Создаю горизонтальный LinearLayout, который содержит EditText и кнопку. Кнопка должна быть минимально возможной ширины, а EditText должен занимать всё оставшееся пространство и быть в одну строчку высотой.
Примерно так:

Я пишу такой код:
<LinearLayout
android:id="@+id/textInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/editTextToSpeak"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:ems="10"
android:hint="@string/text_to_speak"
android:inputType="text" />
<Button
android:id="@+id/saveCard"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/save_card" />
</LinearLayout>
И получаю такую картину:
Кнопка не видна вовсе, а высота EditText почему-то удвоилась.
Подскажите пожалуйста, как сделать, чтобы эти элементы выглядели как на первой картинке?
Ответы (2 шт):
Можно используя android:weightSum и убрав у поля для ввода match_parent сделать такой макет:
<LinearLayout
android:id="@+id/textInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="20"
android:orientation="horizontal" >
<EditText
android:id="@+id/editTextToSpeak"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ems="10"
android:layout_weight="18"
android:hint="54544554"
android:inputType="text" />
<Button
android:id="@+id/saveCard"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="2"
android:text="Э5454554" />
</LinearLayout>
получится так:
либо не используя данные аттрибуты а только немного исправить ваш код:
<LinearLayout
android:id="@+id/textInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/editTextToSpeak"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:hint="54544554"
android:inputType="text" />
<Button
android:id="@+id/saveCard"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Э5454554" />
</LinearLayout>
будет так:
с учетом того что вам нужно так как на картинке, то я бы советовал воспользоваться первым вариантом решения. Там нужно только немного изменить вес каждого элемента и будет похоже на вашу картинку :)
Кнопка должна занимать минимум места, поэтому установлен атрибут layout_width="wrap_content". А чтобы оставшиеся место занял EditText, надо назначить ему ширину 0dp и вес 1. Он будет «размазан» на место, не занятое кнопкой.
<LinearLayout
android:id="@+id/textInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/editTextToSpeak"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:ems="10"
android:hint="@string/text_to_speak"
android:inputType="text" />
<Button
android:id="@+id/saveCard"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/save_card" />
</LinearLayout>
Фотографии прилагаются:



