Макет приложения для Android

1

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

Мое приложение должно иметь такую структуру:

[ Spinner here (fixed height) ]

[ ListView (not-fixed height) ]

[ ImageView (fixed-height) ]

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

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

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

спасибо

Теги:
layout

3 ответа

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 отрегулирует свой размер так, чтобы он соответствовал между spinner и 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 все еще покрывает изображение в этом примере? Кажется, что это так.
  • 0
    Попробуйте, и вы увидите. Макет использует layout_weight, который определяет относительные соотношения между представлениями. 0 означает фиксированный размер, все, что больше (например, 1, который я использовал), позволяет ему растягиваться. Поэтому, если первое и третье представления имеют фиксированные размеры, используйте wrap_content для их высоты или установите явную высоту, например, 30 dp
Показать ещё 1 комментарий
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 не был исправлен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню