D'accord, cette mise en page spécifique me dérange. Et je n'arrive pas à trouver un moyen d'avoir un listView, avec une rangée de boutons en bas pour que la liste ne s'étende pas au-dessus des boutons, et ainsi les boutons sont toujours alignés au bas de l'écran. Voici ce que je veux:
Suppression du lien ImageShack mort
Il semble que cela devrait être si facile, mais tout ce que j'ai essayé a échoué. De l'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);
Réponses:
Je pense que c'est ce que vous recherchez.
la source
android:layout_above="@id/testbutton"
conservera ce quiListView
précède leButton
.addRule(RelativeLayout.ABOVE)
unRelativeLayout
. Vous l'appelez sur unRelativeLayout.LayoutParams
. Vous ajoutez ensuite leListView
auRelativeLayout
, en fournissant celaRelativeLayout.LayoutParams
. Veuillez envisager de passer à XML et de le gonfler, pour une maintenance à long terme.J'ai eu le même problème depuis des lustres.
La solution pour garder le ListView au-dessus des boutons, mais l'empêcher de les couvrir lorsque la liste est longue, est de définir android: layout_weight = "1.0" sur le ListView. Laissez layout_weight sur les boutons non défini afin qu'ils restent à leur taille naturelle, sinon les boutons seront mis à l'échelle. Cela fonctionne avec LinearLayout.
Il y a un exemple dans les ApiDemos Android: ApiDemos / res / layout / linear_layout_9.xml
la source
Je cherchais juste une réponse à cette question et ce fut l'un des premiers résultats. J'ai l'impression que toutes les réponses, y compris celle qui est actuellement choisie comme «meilleure réponse», ne traitent pas du problème sur lequel porte la question. Le problème qui est énoncé est qu'il y a un chevauchement des deux composants
Button
etListView
en ce que le ListView occupe tout l'écran, et le Button flotte visuellement au-dessus (devant) le ListView (blocage de la vue / de l'accès du dernier article dans leListView
)Sur la base des réponses que j'ai vues ici et sur d'autres forums, je suis finalement arrivé à une conclusion sur la façon de résoudre ce problème.
À l'origine, j'avais:
Notez l'utilisation de
RelativeLayout
comme nœud racine.Il s'agit de la dernière version de travail dans laquelle le bouton ne chevauche pas
ListView
:Il n'y a que deux différences. Tout d'abord, je suis passé à l'utilisation d'un
LinearLayout
. Cela aidera avec le bit suivant, qui ajoutaitandroid:layout_weight
à monListView
J'espère que ça aide.
la source
android:layout_alignParentBottom
intérieur d'unLinearLayout
parent, ADT dit "Paramètre de mise en page non valide dans un LinearLayout: layout_alignParentBottom"!Le meilleur moyen est une disposition relative qui définit les boutons sous la liste. Dans cet exemple, les boutons sont également dans une disposition linéaire car il est plus facile de les mettre côte à côte à une taille égale.
la source
Je sais que cet article est assez ancien, mais, pour répondre à la question de l'affiche originale, la raison pour laquelle le code n'a pas fonctionné était boutons.getId () renvoie -1. Si vous comptez faire cela, vous devez définir faire quelque chose comme call buttons.setId (10). Si vous faites cela, le code fonctionne très bien.
la source
cela devrait fonctionner. pour avoir des boutons au-dessus de la liste, placez les boutons dans une autre disposition linéaire.
la source
la solution la plus simple serait de créer deux mises en page linéaires, l'une avec le bouton et l'autre avec la vue de liste (envelopper le contenu sur la hauteur du bouton et faire correspondre le parent sur la hauteur de la mise en page de la liste). alors ne faites qu'une vue de défilement sur la disposition avec la vue de liste et la disposition de bouton sera ignorée. j'espère que ça aide, désolé je n'avais pas envie d'écrire le code.
la source