Похоже, все, что вам нужно, это LinearLayout
с соответствующим весом на ImageView
, чтобы занять оставшееся место.
layout_weight с LinearLayout
часто неправильно понимают.LinearLayout
измеряет своих детей в два прохода.Сначала дети измеряются на основе заданного layout_width или layout_height, затем после того, как все дочерние элементы были измерены, любое оставшееся дополнительное пространство делится в соответствии с их весом.
Это означает две важные вещи:
- Вы никогда не хотите произносить match_parent (или fill_parent в более старых версиях) с весом в направлении макета.(т. е.
layout_width="match_parent"
для LinearLayout
с orientation="horizontal"
или layout_height="match_parent"
для orientation="vertical"
.) match_parent вступает в силу первым, занимая все доступное в настоящее время пространство и не оставляя ни одного оставшегося для оставшихся потомков. - Если вы хотите равномерно разделить пространство между несколькими представлениями с весом или иметь одно представление, занимающее оставшееся пространство независимо от фактического размера содержимого, используйте 0dip в качестве значения
layout_width
или layout_height
.
Попробуйте этот макет:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView android:id="@+id/imgView"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1" />
<TextView android:id="@+id/lblDesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/PhotoDesc"
android:layout_below="@id/imgView" />
<EditText android:id="@+id/edtDesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/lblDesc" />
<!-- Bottom layout contains the three buttons - Take Photos, Transmit, and Setup. -->
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<!-- Take photos button -->
<Button android:id="@+id/btnCamera"
android:gravity="center_vertical|center_horizontal"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/TakePhotos" />
<!-- Transmit button -->
<Button android:id="@+id/btnUpload"
android:gravity="center_vertical|center_horizontal"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/Upload" />
<!-- Setup button -->
<Button android:id="@+id/btnSetup"
android:gravity="center_vertical|center_horizontal"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text="@string/Setup"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>