Disposición de Android con ListView y botones

Muy bien, este diseño específico es molesto. Y parece imposible encontrar una forma de tener una listView, con una fila de botones en la parte inferior para que la lista no se extienda por encima de los botones, por lo que los botones siempre se encajan en la parte inferior de la pantalla. Esto es lo que quiero:

Eliminado muerto ImageShack link

Parece que debería ser tan fácil, pero todo lo que he probado ha fracasado. ¿Alguna ayuda?

Aquí está mi código actual:

RelativeLayout container = new RelativeLayout(this); container.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); //** Add LinearLayout with button(s) LinearLayout buttons = new LinearLayout(this); RelativeLayout.LayoutParams bottomNavParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); bottomNavParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); bottomNavParams.addRule(RelativeLayout.CENTER_HORIZONTAL); buttons.setLayoutParams(bottomNavParams); ImageButton newLayer = new ImageButton(this); newLayer.setImageResource(R.drawable.newlayer); newLayer.setLayoutParams(new LinearLayout.LayoutParams(45, LayoutParams.FILL_PARENT)); buttons.addView(newLayer); container.addView(buttons); //** Add ListView layerview = new ListView(this); RelativeLayout.LayoutParams listParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); listParams.addRule(RelativeLayout.ABOVE, buttons.getId()); layerview.setLayoutParams(listParams); container.addView(layerview); 

Creo que esto es lo que estás buscando.

 <?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"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/testbutton" android:text="@string/hello" android:layout_alignParentBottom="true" /> <ListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/list" android:layout_alignParentTop="true" android:layout_above="@id/testbutton" /> </RelativeLayout> 

Tuve el mismo problema para las edades.

La solución para mantener el ListView encima de los botones, pero evitando que los cubra cuando la lista es larga, es establecer android: layout_weight = "1.0" en el ListView. Deje el layout_weight en los botones unset de modo que permanezcan en su tamaño natural, de lo contrario los botones obtendrá escalado. Esto funciona con LinearLayout.

Hay un ejemplo en el ApiDemos de Android: ApiDemos / res / layout / linear_layout_9.xml

Estaba buscando una respuesta a esta pregunta y este fue uno de los primeros resultados. Me siento como si todas las respuestas, incluyendo la que actualmente se elige como la "mejor respuesta" no es abordar el tema que se pregunta. El problema que se está afirmando es que hay una superposición de los dos componentes Button y ListView en que ListView está ocupando toda la pantalla, y el botón está flotando visualmente encima (delante) del ListView (bloqueando la vista / acceso de El último elemento en el ListView )

Sobre la base de las respuestas que he visto aquí y en otros foros, finalmente llegué a una conclusión sobre cómo resolver esto.

Originalmente, yo tenía:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FF394952"> <ListView android:id="@+id/game_list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" style="@android:style/ButtonBar"> <Button android:id="@+id/new_game" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/new_game" android:textColor="#FFFFFFFF" android:background="@drawable/button_background" /> </LinearLayout> </RelativeLayout> 

Tenga en cuenta el uso de RelativeLayout como el nodo raíz.

Esta es la versión final de trabajo en la que el botón no superpone el ListView :

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FF394952"> <ListView android:id="@+id/game_list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_weight="1.0" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" style="@android:style/ButtonBar"> <Button android:id="@+id/new_game" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/new_game" android:textColor="#FFFFFFFF" android:background="@drawable/button_background" /> </LinearLayout> </LinearLayout> 

Sólo hay dos diferencias. En primer lugar, he cambiado a usar un LinearLayout . Esto ayudará con el siguiente bit, que fue la adición de android:layout_weight a mi ListView

Espero que esto ayude.

La mejor manera es un diseño relativo que establece los botones debajo del listview. En este ejemplo los botones también están en una disposición lineal porque es más fácil ponerlos lado a lado en un tamaño igual.

 <RelativeLayout android:id="@+id/RelativeLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/ListView01" android:layout_alignParentTop="true" android:layout_width="fill_parent" android:layout_height="fill_parent"> </ListView> <LinearLayout android:id="@+id/LinearLayout01" android:layout_below="@+id/ListView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true"> <Button android:id="@+id/ButtonJoin" android:text="Join" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:layout_alignParentBottom="true"> </Button> <Button android:id="@+id/ButtonJoin" android:layout_alignRight="@id/ButtonCancel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Cancel" android:layout_alignParentBottom="true"> </Button> </LinearLayout> </RelativeLayout> 

Sé que este post es bastante antiguo, pero, para responder a la pregunta del cartel original, la razón por la que el código no funcionó fue buttons.getId () devuelve -1. Si va a hacer esto, necesita establecer algo como llamar a los botones. SetId (10). Si lo hace, el código funciona bien.

Esto debería funcionar. Para tener los botones por encima de la lista también, poner los botones dentro de otro diseño lineal.

 <LinearLayout> main container // vertical <LinearLayout> scrollview must be contained in a linear layout //vertical - height to fill parent <ScrollView> set the height of this to fill parent <ListView> will be contained in the scrollview </ListView> </ScrollView> </LinearLayout> <LinearLayout> //horizontal - height to wrap content <Button> </Button> </LinearLayout> </LinearLayout> 

La solución más fácil sería crear dos diseños lineales, uno con el botón y el otro con la vista de lista (Envolver contenido en la altura del botón y coincidir con el padre en la altura de diseño de la lista). Entonces sólo hacer una vista de desplazamiento sobre el diseño con la vista de lista y el diseño del botón se ignorará. Espero que ayuda, lo siento no me sentí como escribir el código.

  • RecylerView no anima la inserción, sin embargo anima la eliminación
  • Conversión de cadena-fecha con nanosegundos
  • IntentService: ¿por qué mi onHandleIntent nunca se llama?
  • View.OnClickListener, ¿puede explicar?
  • Eliminación de archivos de una carpeta - android
  • ¿Ha ocurrido un error no autorizado 401 en la adaptación?
  • Información sobre la clase Movie para Android
  • ¿RestKit en android?
  • Proguard elimina el código no utilizado (en Android)
  • Vista personalizada drawArc, detecta el tacto del usuario en la trayectoria de trazado del arco
  • Las imágenes que no se almacenan en caché localmente (con Universal Image Loader) - tiempos de carga lenta de la imagen
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.