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
- No se puede hacer referencia estática al método no estático (Android getApplicationContext ())
- Cifrado RSA en Java: ¿Problemas de plataforma cruzada?
- Cómo llamar a un método después de un retraso en Android
- ¿Algún problema o problema significativo con la Biblioteca de Databinding de Android?
- RxJava comparte las emisiones de un Observable entre múltiples suscriptores
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);
- Problemas con NativeDecodeByteArray en Android Bitmap.class
- Wakelock y wifilock no funcionan
- Android: agregar insignia a los iconos internos de mi aplicación
- Retrofit 2.0 cómo eliminar?
- Problema al ejecutar mi keystore firmado y liberado en Eclipse
- ¿Cómo serializar usando gson con @SerializedName anotación?
- Android reproducir repetidamente un archivo mp3 sin ningún espacio vacío
- Después de la actualización de Google Play Service a la versión 13, recibí un error
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.
- Cómo dibujar una línea en android
- Reaccionar La compilación androide nativa falló. SDK ubicación no encontrada