2012-03-14 6 views
1

Я разрабатываю приложение для Android для версии 2.2 ver.Android App Layout

Мое приложение должно ВГА такую ​​структуру:

[ Spinner here (fixed height) ]

[ ListView (not-fixed height) ]

[ ImageView (fixed-height) ]

Я должен использовать только в портретной ориентации.

Я использую linearLayout для этого. Как я могу вычислить высоту listView, чтобы показать прядильщик в верхней части экрана, изображение в нижней части, а listview покрывает все свободное пространство, но не выталкивает других из поля зрения.

Будет здорово сделать его динамичным для множества разрешений экрана.

Спасибо

ответ

1

Используйте относительную схему, чтобы выполнить то, что вам нужно.

<?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 будет регулировать его размер так, чтобы он уместился между блесной и ImageView на экране

1

Вы должны использовать 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> 
+0

Является ли «ListView» по-прежнему покрывающим изображение в этом примере? Кажется, так оно и есть. – prolink007

+0

Попробуй, и ты увидишь. В макете используется layout_weight, который определяет относительные отношения между представлениями. 0 означает фиксированный размер, что-то большее (например, используемое мной 1) позволяет растягиваться. Поэтому, если первый и третий виды являются фиксированными размерами, используйте wrap_content на их высоте или задайте явную высоту, например. 30dp –

+0

Я просто проверял его, не помещая ничего в макеты, и он был закрыт, но я попробую добавить материал в макет и посмотреть. – prolink007

0

Вот еще один способ сделать это, используя 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 не исправлялся.