2010-06-22 11 views
15

Estoy seguro de que me falta algo simple para implementarlo, pero he pasado por todas las combinaciones conocidas que puedo obtener para obtener lo que soy buscando hacer trabajo Estoy tratando de tener un pie de página de ListView en la parte inferior de la pantalla cuando los elementos de ListView no llenan la página.Vista de pie de página de Android ListView que no se coloca en la parte inferior de la pantalla

Por ejemplo, tengo una página con un ListView de tres elementos y un FooterView (usando el AddFooterView de ListView) Quiero que el footerView se ubique en la parte inferior de la pantalla. Cuando ListView contiene suficientes elementos para desplazarse por la pantalla, footerView debe ubicarse al final de la lista (no en la parte inferior de la pantalla).

El XML que estoy tratando de usar se enumera a continuación. ¡Cualquier ayuda es muy apreciada!

layout.xml

<?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" 
android:background="@+drawable/background"> 
<ListView 
    android:id="@+id/menu" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:listSelector="@android:color/transparent" 
    android:divider="@null"> 
</ListView></RelativeLayout> 

ListViewRow.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
style="@style/Nationwide.menu"> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/nav_item" 
    style="@style/Nationwide.menu.row"> 
    <ImageView 
     android:id="@+id/image_icon" 
     style="@style/Nationwide.menu.leftIcon" /> 
    <TextView 
     android:id="@+id/nav_text" 
     style="@style/Nationwide.menu.text" /> 
    <ImageView 
     android:id="@+id/chevron_symbol" 
     style="@style/Nationwide.menu.rightIcon" /> 
</LinearLayout> 
<View 
    android:layout_height="1dp" 
    android:background="@drawable/nav_item_divider_dark" /> 
<View 
    android:layout_height="1dp" 
    android:background="@drawable/nav_item_divider_light" /></LinearLayout> 

ListViewFooter.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/footer" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_alignParentBottom="true"> 
<View 
    android:id="@+id/footer_image" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_alignParentBottom="true" /></RelativeLayout> 

Java

LayoutInflater inflater = this.getLayoutInflater(); 
    View footerView = inflater.inflate(R.layout.footer, null); 

    footerView.findViewById(R.id.footer_image).setBackgroundDrawable(resources.getDrawable(R.drawable.cone_footer)); 

    mMenuListView.addFooterView(footerView); 

Las cosas que he probado hasta la fecha incluyen:

  • Agregar el Pie de página como se muestra arriba
  • agrega un recurso estirable como fondo en el ListView (Esto hizo que el ListView a no abarcar todo el ancho de la pantalla y de desplazamiento de una manera extraña, debido a las regiones extensibles 9-Patch)
  • Adición de la cone_footer como una vista separada en la Disposición

Gracias de antemano!

+0

Me disculpo, pero no agregué suficiente código de Java. Después de agregar footerView a listView, se ejecuta este código. mMenuListView.setAdapter (panel); –

Respuesta

3

En caso de que otros estén buscando una respuesta similar, esto es lo que terminé haciendo para resolver el problema que tenía. Debido a que el "Pie de página" que quería añadir simplemente era una imagen para llenar un espacio en la pantalla (cuando las vistas eran cortas), y el enfoque de ListView no era realmente lo que necesitaba para mi implementación, terminamos con esto como nuestro diseño XML:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res/com.example.android.apis" 
    style="@style/company.mainContainer"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical"> 
     <!-- enter page content here --> 

     <View android:layout_height="0px" android:layout_weight="1" 
      android:visibility="invisible" /> 

     <ImageView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom|right" 
      android:scaleType="fitXY" 
      android:src="@drawable/footer_cone"> 
     </ImageView> 

    </LinearLayout> 

</ScrollView> 

Espero que esto ayude a los demás!

16

Quiero que footerView se siente en el en la parte inferior de la pantalla.

No es así como funciona addFooterView().

Cuando el ListView contiene suficientes elementos para desplazarse por la pantalla, el footerView debe sentarse al final de la lista (no en la parte inferior de la pantalla ).

Eso tampoco es cómo addFooterView() funciona.

Si usted quiere que desplazarse con la lista (es decir, si los tres elementos de la lista ocupan la mitad superior de la pantalla, el pie de página es justo debajo de los tres puntos), a continuación, utilizar addFooterView() ... pero luego el pie de página siempre se desplaza con la lista.

Si desea que no se desplace con la lista, un enfoque es usar un RelativeLayout como su elemento primario, ancle su pie de página en la parte inferior de la pantalla y coloque el ListView entre la parte superior y el pie de página. .pero entonces el pie de página nunca se desplaza.

+0

Ah, ¿entonces no hay manera de anclar una vista de forma condicional a la parte inferior de una pantalla si el contenido no llena la pantalla y se desplaza de otra manera? Volver a los diseñadores que vamos ... Impresionante. Gracias por la respuesta. –

+2

Ahora que lo leo de nuevo, no debo haber sido claro en cuanto a lo que los diseñadores quieren. Quieren que el pie de página se desplace con esta lista con una advertencia: si la lista (pie de página incluido) es más pequeña que la pantalla, fuerce el pie de página para alinearlo en la parte inferior de la pantalla. De lo contrario, solo muéstrelo después de la última fila listView. –

+0

@George Walters II: no hay nada integrado en Android que pueda lograr esa apariencia simplemente. Como sugiere tlayton, puede haber una forma de lograr un aspecto similar, pero con gran dificultad, y posiblemente a costa de UX (p. Ej., Ya no es navegable con D-pad). – CommonsWare

1

Lo que estás tratando de hacer es bastante complicado. Desea que el "pie de página" se desplace con la lista (a veces al menos), lo que significa que debe estar dentro del diseño de ListView. Pero también (otras veces) quiere que se coloque el mismo pie de página en relación con la pantalla, o más precisamente en relación con algún diseño principal (o padre-padre, etc.) de ListView, lo que significa que el pie de página no debe contenerse dentro del ListView. Estos dos escenarios requieren la colocación mutuamente exclusiva del elemento en cuestión.

Sin embargo, este no es un diseño pobre por parte del SDK. Parece de tu descripción que podrías estar pensando sobre el problema de la manera incorrecta. ¿Es este elemento realmente un pie de página, conceptualmente hablando, si no siempre está en el "pie" de la lista, pero a veces en la parte inferior de la pantalla? PODRÍAS poder hacer el tipo de diseño que deseas combinando ListViews, ScrollViews, RelativeLayouts, y algunos android: layout_height trickery. Sin embargo, es una mejor opción simplemente adoptar un enfoque alternativo a su diseño.

+0

Bueno, debería ser el pie de página de la lista semánticamente, lo que creo que debo hacer es agregar dinámicamente una vista antes de ese "pie de página" que coloque la cantidad de espacio adecuada para colocar la imagen donde queremos. –

+0

hola, necesito ayuda para configurar el pie de página en mi vista de lista y para expandir la lista cuando hago clic en el evento del pie de página, permítanme las pautas para hacer lo mismo, por favor provéenme el proceso paso a paso. – MGSenthil

1

Igual como no

<RelativeLayout> 
    <include android:id="@+id/header" layout="@layout/header" android:layout_width="fill_parent" android:layout_alignParentTop="true" /> 

    <include android:id="@+id/footer" layout="@layout/footer" android:layout_width="fill_parent" android:layout_alignParentBottom="true" /> 

    <ListView android:layout_below="@id/header" android:layout_above="@id/footer"/> 
</RelativeLayout> 
1

aquí es el truco margen Solía ​​achive ese comportamiento.

básicamente se establece la ListView a wrap_content, y se coloca el Button en el espacio de margen inferior ListView usando margen negativo.

utiliza altura fija, pero también puede medir el botón en tiempo de ejecución y establecer el margen positivo y negativo dinámicamente.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<ListView 
    android:id="@+id/list_item" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="50dp" 
    android:layout_alignParentTop="true" /> 

<Button 
    android:layout_width="fill_parent" 
    android:layout_height="50dp" 
    android:layout_below="@+id/list_item" 
    android:paddingBottom="@dimen/margin" 
    android:layout_topMargin="-50dp" 
    android:paddingTop="@dimen/margin" 
    android:text="@string/add" /> 

</RelativeLayout> 
Cuestiones relacionadas