web-dev-qa-db-fra.com

Comment afficher un bouton à la fin d'un Android ListView

Je veux afficher un bouton à la fin d'une vue de liste Android. Comment puis-je y parvenir?

Je ne veux pas le coller au bas de l'activité en utilisant alignparentbottom="true". En utilisant layout_below ne fonctionne pas non plus pour moi.

Mon XML actuel:

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="horizontal"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:background="@drawable/main_bg">

    <LinearLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:orientation="vertical"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content">

        <ListView
            Android:id="@+id/Android:list"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:drawSelectorOnTop="false"
            Android:cacheColorHint="#ff6a00"
            Android:divider="#ff8f40"
            Android:dividerHeight="1px" />

    </LinearLayout>

    <RelativeLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent"
            Android:layout_height="50sp"
        Android:background="#676767"
        Android:orientation="vertical">

        <Button
            Android:layout_width="100px"
            Android:layout_height="wrap_content"
            Android:id="@+id/btnGetMoreResults"
            Android:layout_marginLeft="10px"
            Android:text="Get more" />

    </RelativeLayout>

</RelativeLayout>
41
UMAR

Vous pouvez utiliser ListView # addFooterView () pour ajouter un View au bas du ListView.

74

Je le fais comme ce bouton fixe en bas de l'écran

   <RelativeLayout
    Android:id="@+id/relativeLayout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <ListView
        Android:id="@+id/listView"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:layout_above="@+id/btn_New" >
    </ListView>

    <Button
        Android:id="@+id/btn_New"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerHorizontal="true"
        Android:layout_centerVertical="true"
        Android:layout_marginBottom="20dp"
        Android:text="@string/New"
        Android:width="170dp"
        Android:layout_alignParentBottom="true" />
</RelativeLayout>

si vous utilisez linearLayout, affectez Android: layout_weight = "1" à la liste et n'attribuez pas de poids au bouton, cela fonctionne

34
Sachin Gurnani

Vous pourriez faire quelque chose comme ça:

final Button btnAddMore = new Button(this);
btnAddMore.setText(R.string.art_btn_moreIssues);
exArticlesList = (ExpandableListView) this.findViewById(R.id.art_list_exlist);
exArticlesList.addFooterView(btnAddMore);
15
Pablo Johnson

1 Si vous souhaitez ajouter Button comme dernier élément de la liste

Vous devez créer un ListAdapter personnalisé pour votre ListView qui créera une vue avec un Button dans la méthode getView. Vous devez décider comment renvoyer votre vue personnalisée pour le dernier élément, vous pouvez la coder en dur (retourner le nombre d'éléments +1 dans la méthode getCount et retourner la vue personnalisée dans getView lorsque position> nombre d'éléments) ou vous pouvez ajouter un élément à la structure que vous serez prendre des données de (Array, Cursor etc.) et vérifier si le champ de l'élément a une certaine valeur

2 Si vous souhaitez ajouter un élément sous la vue de liste

Vous devez utiliser Android: attribut layout_width et rendre ListView et TextView "vide" (vous devez l'utiliser pour montrer aux utilisateurs que la liste est vide et que le rendu de la vue est terminé) layout_weight supérieur aux boutons layout_weight

Vérifiez comment cela se fait dans l'activité de recherche Transdroids http://code.google.com/p/transdroid/source/browse/trunk/res/layout/search.xml

7
skyman

Utilisez la vue Pied de page pour afficher la liste de son fonctionnement.

list_layout.xml:

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content">

    <ListView
        Android:id="@+id/list"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:drawSelectorOnTop="false"
        Android:cacheColorHint="#ff6a00"
        Android:divider="#ff8f40"
        Android:dividerHeight="1px" />

</LinearLayout>

footerview.xml:

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
>
    <Button
        Android:layout_width="100px"
        Android:layout_height="wrap_content"
        Android:id="@+id/btnGetMoreResults"
        Android:layout_marginLeft="10px"
        Android:text="Get more" />
</FrameLayout>

et dans Activity.Java

    list=(ListView)findViewById(R.id.list);

    FrameLayout footerLayout = (FrameLayout) getLayoutInflater().inflate(R.layout.footerview,null);
    btnPostYourEnquiry = (Button) footerLayout.findViewById(R.id.btnGetMoreResults);

    list.addFooterView(footerLayout);
6
SAndroidD

Fournissez simplement "layout_weight = 1" de ListView.

Exemple :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
              Android:orientation="vertical"
              Android:layout_width="match_parent"
              Android:layout_height="match_parent">
    <ListView
        Android:id="@+id/Android:list"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:drawSelectorOnTop="false"
        Android:cacheColorHint="#ff6a00"
        Android:divider="#ff8f40"
        Android:layout_weight="1"
        Android:dividerHeight="1px" />
    <Button
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="bottom"
        Android:layout_marginLeft="10dp"
        Android:layout_marginRight="10dp"
        Android:background="#ff8f40"
        Android:padding="20dp"
        Android:text="Click"
        Android:textColor="#FFFFFF"
        Android:textSize="22sp"
        />
</LinearLayout>
4
Arunendra

Je suis venu ici chercher une réponse d'abord mais je l'ai trouvée ailleurs ...

C'est vraiment facile, il vous suffit de mettre le poids 1 dans la liste à l'intérieur d'une disposition linéaire, les autres textviews/boutons/etc n'ont pas besoin d'avoir de valeur de poids.

Voici un exemple: https://bitbucket.org/generalplus/Android_development/src/5a892efb0551/samples/ApiDemos/res/layout/linear_layout_9.xml

3
Beto

Eh bien ... les détails des implémentations ne sont pas si faciles si vous voulez créer un bouton "ajouter plus" à la fin de la liste. Voici donc du code:

myArrayAdapter = new ArrayAdapter<Show>(this, Android.R.layout.simple_list_item_1, myList) {

     @Override
     public View getView(int position, View convertView, ViewGroup parent) {

        if( position >= super.getCount()  )
            return buttonMore ;

        MyNormalView view = null; 
        if (convertView == null || convertView instanceof Button )
            view = new MyNormalView(getContext());
        else
            view = (MyNormalView) convertView;

        //customize view here with data
        return view;
    }

    @Override
    public int getCount() {
       return super.getCount()+1;
    }//met
};
0
Snicolas

Vous pouvez bien sûr utiliser un adaptateur personnalisé et spécifier un élément de pied de page. Mais vous pourriez probablement aussi vous en sortir en le plaçant au bas d'un ScrollView et faire étirer le ListView verticalement au contenu:

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="horizontal"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:background="@drawable/main_bg">

  <ScrollView
      Android:layout_height="fill_parent"
      Android:layout_width="fill_parent">

    <LinearLayout 
        Android:orientation="vertical"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
            >

      <ListView Android:id="@+id/Android:list"
          Android:layout_width="fill_parent" 
          Android:layout_height="wrap_content"
          Android:drawSelectorOnTop="false" 
          Android:cacheColorHint="#ff6a00"
          Android:divider="#ff8f40"
          Android:dividerHeight="1px"
          />

      <RelativeLayout 
          Android:layout_width="fill_parent"
          Android:layout_height="50sp"
          Android:background="#676767"
          Android:orientation="vertical">

        <Button Android:layout_width="100px"
            Android:layout_height="wrap_content"
            Android:id="@+id/btnGetMoreResults"
            Android:layout_marginLeft="10px"
            Android:text="Get more" />

      </RelativeLayout>

    </LinearLayout>

  </ScrollView>

</RelativeLayout>
0
Richard Szalay