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>
Vous pouvez utiliser ListView # addFooterView () pour ajouter un View
au bas du ListView
.
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
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);
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
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);
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>
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
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
};
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>