101 votes

Android Mise en page avec ListView et Boutons

Bon, cette disposition particulière est tout simplement ennuyeux moi. Et n'arrive pas à trouver un moyen d'avoir une liste, avec une rangée de boutons au bas de l'échelle alors que la liste ne s'étend pas au-dessus des boutons, et donc les boutons sont toujours accrochés au bas de l'écran. Voici ce que je veux: alt text

Il semble que ce devrait être facile, mais tout ce que j'ai essayé a échoué. Toute aide?

Voici mon code actuel:

    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);

136voto

repoc Points 1485

Je pense que c'est ce que vous cherchez.

<?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>

57voto

David Ingram Points 451

J'ai eu le même problème pour les âges.

La solution pour garder la liste ci-dessus, les boutons, mais l'empêchant de couvrir quand la liste est longue, est de mettre android:layout_weight="1.0" sur la liste. Laissez le layout_weight sur les boutons annuler afin qu'ils restent à leur taille normale, sinon les boutons obtiendrez des mises à l'échelle. Cela fonctionne avec LinearLayout.

Il y a un exemple dans l'Android ApiDemos: ApiDemos/res/layout/linear_layout_9.xml

20voto

Dallas Points 646

Je viens chercher une réponse à cette question et ce fut l'un des premiers résultats. Je me sens comme si toutes les réponses, y compris celle qui est actuellement choisi comme "meilleure réponse" n'est pas de traiter de la question posée à propos de. Le problème qui est posé est qu'il y a un chevauchement des deux composants Button et ListView dans la ListView est de prendre la totalité de l'écran, et le Bouton est visuellement flottant au-dessus (en face de) la ListView (vue de blocage/accès au dernier élément de la ListView)

Sur la base des réponses que j'ai vu ici et sur d'autres forums, je suis finalement venu à une conclusion sur la façon de résoudre ce problème.

A l'origine, j'ai eu:

<?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>

Notez l'utilisation de l' RelativeLayout le nœud racine.

C'est la finale, version de travail dans lequel le Bouton ne se chevauchent pas l' 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>

Il y a seulement deux différences. Tout d'abord, j'ai passé à l'aide d'un LinearLayout. Cela aidera avec le bit suivant, qui a été l'ajout d' android:layout_weight mon ListView

J'espère que cette aide.

8voto

Patrick Kafka Points 4857

La meilleure façon est un relatif à la mise en page qui définit les boutons en dessous de la liste. Dans cet exemple, les boutons sont également dans un linéaire de la mise en page, car il est plus facile de les mettre côte à côte à une taille égale.

<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>

1voto

Doo Dah Points 683

Je sais que ce post est un peu vieux, mais, pour répondre à l'affiche originale de la question, la raison, le code n'a pas de travail était boutons.getId() retourne -1. Si vous allez pour ce faire, vous devez définir faire quelque chose comme les boutons d'appel.setId(10). Si vous faites cela, le code fonctionne très bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X