Я разрабатываю приложение для Android для версии 2.2 ver.
Мое приложение должно иметь такую структуру:
[ Spinner here (fixed height) ]
[ ListView (not-fixed height) ]
[ ImageView (fixed-height) ]
Я должен использовать только портретную ориентацию.
Для этого я использую linearLayout. Как я могу вычислить высоту listView, чтобы показать прядильщик в верхней части экрана, изображение в нижней части, а listview покрывает все свободное пространство, но не выталкивает других из поля зрения.
Будет здорово сделать его динамичным для множества разрешений экрана.
спасибо
Используйте относительный макет, чтобы выполнить то, что вам нужно.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:src="@drawable/icon" />
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/spinner1"
android:layout_above="@+id/imageView1" />
</RelativeLayout>
Посредством этого listview отрегулирует свой размер так, чтобы он соответствовал между spinner и imageview на вашем экране
Вам нужно использовать атрибут android: layout_weight для элемента переменной высоты, чтобы он заполнил доступное пространство.
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Spinner
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
Вот еще один способ сделать это, используя weights
. Это может быть самый простой подход.
Вы можете добавить weight
к проценту экрана, который вы хотели бы использовать.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Spinner
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="10"/>
<ListView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="80"></ListView>
<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="10"/>
</LinearLayout>
EDIT: Теперь, когда я думаю об этом, это "исправит" размер всех виджетов. Они будут "фиксированы" в процентах экрана. Это будет хорошо масштабироваться с другими размерами экрана, но вы сказали, что хотите, чтобы ListView
не был исправлен.
ListView
все еще покрывает изображение в этом примере? Кажется, что это так.