ListView вытесняет другие представления с экрана.

Я изо всех сил пытаюсь добиться правильного отображения макета, и я попытался создать самый короткий и наименьший возможный пример моей проблемы.

Моя цель состоит в том, чтобы иметь представление верхнего и нижнего колонтитула вверху и внизу экрана, с ListViewмежду ними, с другим представлением (назовем его меткой , это серая рамка на снимках экрана) прямо под ListView. Эта метка и нижний колонтитул должны всегда отображаться, когда ListViewнеобходимо прокрутить.

Визуальный результат

Когда ListViewне нужно прокручивать (это правильно):

when the ListView doesn't need to scroll

Когда ListViewнужно прокручивать, нижний колонтитул и серое поле выталкиваются за пределы экрана (неправильно):

when the ListView needs to scroll

Layout

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical">
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="header"
            android:padding="20dp"
            android:textSize="18sp"
            android:background="@color/red"/>
    <ListView android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:id="@android:id/list" />
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="this should be directly below the ListView, but not pushed off screen when the ListView needs to scroll"
            android:padding="5dp"
            android:background="@color/light_gray"
            android:textColor="@color/black"/>
    <!-- Used to push the footer to the bottom -->
    <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1"/>
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="footer"
            android:padding="20dp"
            android:textSize="18sp"
            android:background="@color/blue"/>
</LinearLayout>

Test Activity

public class TestActivity extends ListActivity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        ArrayList<String> items = new ArrayList<String>();
        items.add("one");
        items.add("two");
        items.add("three");
        items.add("four");
        items.add("five");
        items.add("six");
        items.add("seven");
        items.add("eight");
        items.add("nine");
        items.add("ten");
        setListAdapter(new ArrayAdapter<String>(this, R.layout.simple_list_item_1, items));
        setContentView(com.myproject.android.R.layout.test);
    }
}

Я испробовал несколько различных подходов, таких как предоставление ListViewlayout_weight="1"и удаление пустой вид, который я использую, чтобы сдвинуть нижний колонтитул вниз. Это почти то, что я хочу, он сохраняет видимыми нижний колонтитул и метку при прокрутке ListView, но когда он имеет только 1 или 2 элемента, мне нужно серое поле прямо под ListView. . Я также безуспешно пытался использовать RelativeLayout. Я думаю, что я совершенно неправильно понимаю вещи.

РЕДАКТИРОВАТЬ

Вот моя попытка с RelativeLayout, которая все еще неверна.

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="header"
            android:padding="20dp"
            android:textSize="18sp"
            android:background="@color/red"
            android:id="@+id/header"
            />
    <ListView android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:id="@android:id/list"
              android:layout_below="@id/header"/>
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="this should be directly below the ListView, but not pushed off screen when the ListView needs to scroll"
            android:padding="5dp"
            android:background="@color/light_gray"
            android:textColor="@color/black"
            android:layout_below="@android:id/list"/>

    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="footer"
            android:padding="20dp"
            android:textSize="18sp"
            android:background="@color/blue"
            android:layout_alignParentBottom="true"
            android:id="@+id/footer"/>
</RelativeLayout>

Относительный макет (все еще неправильно):

relative layout attempt

9
задан wsanville 9 March 2012 в 17:13
поделиться