Muy bien, este diseño específico me está molestando. Y parece que no puedo 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 enlace de ImageShack muerto
Parece que debería ser tan fácil, pero todo lo que he intentado 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);
Respuestas:
Creo que esto es lo que estás buscando.
fuente
android:layout_above="@id/testbutton"
mantendrá loListView
anterior elButton
.addRule(RelativeLayout.ABOVE)
a unRelativeLayout
. Lo llamas en unRelativeLayout.LayoutParams
. Luego agrega elListView
alRelativeLayout
, proporcionando esoRelativeLayout.LayoutParams
. Considere cambiar a XML e inflarlo, para un mantenimiento a largo plazo.Tuve el mismo problema durante años.
La solución para mantener ListView encima de los botones, pero evitar que los cubra cuando la lista es larga, es configurar android: layout_weight = "1.0" en ListView. Deje el layout_weight en los botones sin configurar para que permanezcan en su tamaño natural, de lo contrario los botones se escalarán. Esto funciona con LinearLayout.
Hay un ejemplo en Android ApiDemos: ApiDemos / res / layout / linear_layout_9.xml
fuente
Solo estaba buscando una respuesta a esta pregunta y este fue uno de los primeros resultados. Siento que todas las respuestas, incluida la que se elige actualmente como la "mejor respuesta", no abordan el tema sobre el que se pregunta. El problema que se indica es que hay una superposición de los dos componentes
Button
yListView
en que ListView ocupa toda la pantalla, y el Botón flota visualmente encima (delante de) ListView (bloqueando la vista / acceso de la última artículo en elListView
)Basado en las respuestas que he visto aquí y en otros foros, finalmente llegué a una conclusión sobre cómo resolver esto.
Originalmente, tenía:
Tenga en cuenta el uso de
RelativeLayout
como nodo raíz.Esta es la versión final y funcional en la que el botón no se superpone a
ListView
:Solo hay dos diferencias. Primero, cambié a usar un
LinearLayout
. Esto ayudará con el siguiente bit, que se agregóandroid:layout_weight
a miListView
Espero que esto ayude.
fuente
android:layout_alignParentBottom
dentro de unLinearLayout
padre, ADT dice "Parámetro de diseño no válido en un LinearLayout: layout_alignParentBottom".La mejor manera es un diseño relativo que establece los botones debajo de la vista de lista. En este ejemplo, los botones también tienen un diseño lineal porque es más fácil colocarlos uno al lado del otro en el mismo tamaño.
fuente
Sé que esta publicación es bastante antigua, pero, para responder a la pregunta del póster original, la razón por la que el código no funcionó fue buttons.getId () devuelve -1. Si va a hacer esto, debe configurar hacer algo como call buttons.setId (10). Si lo hace, el código funciona bien.
fuente
Esto debería funcionar. para tener botones encima de la vista de lista también, coloque los botones dentro de otro diseño lineal.
fuente
la solución más sencilla sería crear dos diseños lineales, uno con el botón y el otro con la vista de lista (ajustar el contenido a la altura del botón y hacer coincidir el padre con 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 de los botones. Espero que ayude, lo siento, no tuve ganas de escribir el código.
fuente