Android: как создать представление, чтобы заполнить свободное пространство?
Это кажется простым, но я не могу понять, как это сделать. У меня горизонтальная компоновка с EditText и двумя ImageButtons. Я хочу, чтобы ImageButtons имел фиксированный размер, а EditText занимал оставшееся место в макете. Как это можно сделать?
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</EditText>
<ImageButton
android:src="@drawable/img1"
android:layout_width="50dip"
android:layout_height="50dip">
</ImageButton>
<ImageButton
android:src="@drawable/img2"
android:layout_width="50dip"
android:layout_height="50dip">
</ImageButton>
</LinearLayout>
Ответы
Ответ 1
попробуйте это в относительной компоновке
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/btn1"
android:src="@drawable/icon"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_alignParentRight="true"/>
<ImageButton
android:id="@+id/btn2"
android:src="@drawable/icon"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_toLeftOf="@+id/btn1"/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/btn2">
</EditText>
</RelativeLayout>
Ответ 2
Если вы хотите сохранить макет тем же (т.е. кнопки после текста), используйте свойство layout_weight
вместе с fill_parent
, таким образом:
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<EditText
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</EditText>
<ImageButton
android:src="@drawable/img1"
android:layout_width="50dip"
android:layout_height="50dip">
</ImageButton>
<ImageButton
android:src="@drawable/img2"
android:layout_width="50dip"
android:layout_height="50dip">
</ImageButton>
</LinearLayout>
Предоставление EditText
'weight' заставляет его задуматься последним и дает преимущество кнопкам. Играйте с разными layout_weights и посмотрите, сколько удовольствия вы можете иметь!
Ответ 3
Итак:
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/button1"
android:src="@drawable/img1"
android:layout_width="50dip"
android:layout_alignParentTop="true"
android:layout_height="50dip">
</ImageButton>
<ImageButton
android:src="@drawable/img2"
android:layout_width="50dip"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/button1"
android:layout_height="50dip">
</ImageButton>
<EditText
android:layout_below="@id/button"
android:layout_width="wrap_content"
android:layout_height="fill_parent">
</EditText>
</RelativeLayout>
Ключевыми моментами макета являются:
- Элементы с фиксированным размером помещаются сначала в макет, таким образом, когда Android приходит к вычислению высоты высоты вещей с помощью
fill_parent
позже в файле, он учитывает только оставшееся пространство, а не все пространство, которое оно могло бы занять, если бы ничего не было.
- EditText имеет высоту
fill_parent
(match_parent
в версии 2.2+), так что он занимает оставшуюся часть доступного пространства
Извините, не прочитал ваш вопрос. Приведенный выше код дает ответ, если вы хотите сделать это вертикально. Для горизонтальной компоновки код, отправленный @Sunil, должен работать.
Ответ 4
Используйте set layout_width
или layout_height
to 0dp
(По желанию вы хотите заполнить оставшееся пространство).
Затем используйте layout_weight
, чтобы заполнить оставшееся пространство.