match_parent ne fonctionne pas comme prévu
J'imagine que cela doit être assez facile à répondre, si vous comprenez Layouts XML mieux que moi ce qui est. Je ne semble pas pour obtenir ce que je pensais que je devrais lors de l'utilisation de la match_parent layout_height.
J'ai un LinearLayout de l'élément racine avec android:orientation="vertical". À l'intérieur de ce LinearLayout je veux de trois éléments:
- TextView
- ListView
- TextView
Pour le TextViews j'ai mis android:layout_height="wrap_content" de sorte qu'ils seront seulement aussi grand que nécessaire pour afficher leur contenu. La chose est, je veux le un TextView de s'asseoir au sommet de la forme, de l'autre à s'asseoir au fond de la forme, tandis que la liste se remplit tout l'espace disponible sur le formulaire. Voici donc ce que mon xml de mise en page ressemble à ceci:
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp" android:text="Top TextView" /> <ListView android:id="@+id/listView_Species" android:layout_width="match_parent" android:layout_height="match_parent" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp" android:text="Bottom TextView" />
Mais ça ne fonctionne pas. Voici ce que j'obtiens. J'ai sélectionné de la liste de sorte qu'il sera mis en évidence. Remarquez comment il s'étend tout le chemin vers le bas de la forme, en poussant la partie inférieure TextView le formulaire.
Lorsque je change la layout_height propriété de la ListView certaine valeur fixe, comme 180dp, c'est ce que la forme ressemble. Je suis en train de poster afin de prouver que le fond TextView est là, mais je ne sais toujours pas comment l'obtenir pour être fixé sur le bas de l'écran tandis que la liste de occupe tout l'espace qui reste, mais entre les deux TextViews.
Merci d'avance.
Vous devez vous connecter pour publier un commentaire.
Tandis que les autres réponses essayer de résoudre votre problème (ce qui n'est pas fait, ils vous suggère de faire quelque chose qui ressemble similaire mais peut ou peut ne pas sembler bonne sur différents appareils), personne n'a rempli les lacunes dans vos connaissances de LinearLayouts et match_parent. Et ces lacunes sont très communs-Google documents est encore loin de stellaire.
D'abord, comment les Vues qui travaillent dans un LinearLayout? Nous allons passer par le processus d'élaboration d'un LinearLayout, à l'aide de
orientation="vertical"
pour des raisons de simplicité.match_parent
oufill_parent
(ancien nom pour la même chose), alors la hauteur de la Vue est étirée pour remplir l'ensemble de la zone d'affichage. Si la hauteur estwrap_content
, puis de mesurer l'espace vertical de la Vue, et d'utiliser l'espace pour la Vue. Si la hauteur est un nombre différent de zéro, utiliser exactement le même nombre de pixels pour l'Affichage de la hauteur (peut-clip si elle est trop petite). Si la hauteur est de 0 voir ci-dessous.gravity
. Cela nécessite un second passage, le stockage de la gravité de tous les points de vue et de répartir leurs hauteurs proportionnellement. Comme vous pouvez le deviner, la deuxième passe de doubler le temps de mise en page prend, ce qui n'est pas significatif pour de simples mises en page.Explication de votre exemple: le premier enfant de La LL (la première TextView) est mesuré et prend une certaine quantité de pixels. Ensuite, votre ListView prend tout l'espace restant (via
match_parent
). Et puis votre deuxième TextView n'est pas du tout comme c'est le bas de l'écran. Qui est à peu près ce que vous avez observé, mais maintenant, vous comprenez pourquoi.Solution: Utilisation
RelativeLayout
. Fonctionne parfaitement dans ce cas.Le RelativeLayout raconte la mise en page inflater pour dessiner le premier TextView dans le haut, puis dessiner le deuxième TextView en bas, puis remplir le reste de l'espace avec votre Liste. Je crois que c'est exactement ce que vous voulez.
Bienvenue Android. Vous serez l'utilisation de ce modèle BEAUCOUP!
Changer le
ListView
hauteur de 0dp et ajouterweight=1
c'est à dire:
utiliser android:layout_weight pour définir le poids de vos widgets à l'intérieur de la ultrapériphériques de mise en page. Déclarer leur hauteur
0dp
puis définirandroid:layout_weight
à chacun d'eux .Total de peser la somme de trois d'entre eux devrait être de 1. Selon vos besoins, vous pouvez deine
0.1
de poids à la fois haut et en bas TextView et de définir0.8
à la liste.