studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java android listview layout

java - programacion - Diseño de Android con ListView y botones



manual de programacion android pdf (7)

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>

Bien, este diseño específico me molesta. Y parece que no se puede encontrar una manera de tener una vista de lista, con una fila de botones en la parte inferior para que la vista de lista no se extienda por encima de los botones, por lo que los botones siempre se ajustan a la parte inferior de la pantalla. Esto es lo que quiero:

eliminado el enlace muerto de ImageShack

Parece que debería ser tan fácil, pero todo lo que he probado ha fallado. ¿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);


Esto debería funcionar. para tener botones encima de la vista de lista también, coloque 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 mejor manera es una disposición relativa que establece los botones debajo de la vista de lista. En este ejemplo, los botones también están en un diseño lineal porque es más fácil ponerlos uno al lado del otro 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 esta publicación es bastante antigua, 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, debe hacer algo como call buttons.setId (10). Si haces eso, el código funciona bien.


Solo estaba buscando una respuesta a esta pregunta y este fue uno de los primeros resultados. Siento como si todas las respuestas, incluida la que actualmente se elige como la "mejor respuesta", no es abordar el problema sobre el que se pregunta. El problema que se plantea es que hay una superposición de los dos componentes Button y ListView en que ListView ocupa toda la pantalla, y el botón flota visualmente sobre (delante de) ListView (vista / acceso de bloqueo de el último elemento en el ListView )

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

Originalmente, tuve:

<?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 nodo raíz.

Esta es la versión final de trabajo en la que el botón no se superpone a 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>

Solo hay dos diferencias. Primero, LinearLayout a usar LinearLayout . Esto ayudará con el siguiente bit, que estaba agregando android:layout_weight a mi ListView

Espero que esto ayude.


Tuve el mismo problema por años.

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 sin ajustar para que permanezcan en su tamaño natural, de lo contrario los botones se escalarán. Esto funciona con LinearLayout.

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


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 (Ajustar el contenido en la altura del botón y hacer coincidir el elemento principal en la altura del diseño de la lista). luego solo haga una vista de desplazamiento sobre el diseño con la vista de lista y se ignorará el diseño del botón. Espero que ayude, lo siento, no tuve ganas de escribir el código.