206 votes

Android: pourquoi n'est-il pas maxHeight de Vue?

Afficher un minHeight mais de toute façon manquent maxHeight:

Ce que je suis en train de réaliser est d'avoir quelques éléments (points de vue) remplissant une ScrollView. Quand il y a 1..3 éléments que je veux afficher directement. Sens de l' ScrollView a la hauteur de 1, 2 ou 3 éléments.

Quand il y a 4 éléments ou plus je veux de l' ScrollView pour arrêter l'expansion (donc un maxHeight) et commencer à fournir de défilement.

Cependant, il n'y a malheureusement aucun moyen de définir un maxHeight. Donc je dois mettre mon ScrollView de la hauteur par programmation, soit WRAP_CONTENT quand il y a 1..3 éléments et définir la hauteur d' 3*sizeOf(View) quand il y a 4 éléments ou plus.

Quelqu'un peut-il expliquer pourquoi il n'y a pas d' maxHeight à condition, lorsqu'il y a déjà un minHeight?

(BTW: certains points de vue, comme ImageView ont un maxHeight mis en œuvre.)

97voto

whizzle Points 356

Aucune de ces solutions n'a fonctionné pour ce dont j'avais besoin, qui a été un ScrollView ensemble de wrap_content mais avoir un maxHeight de sorte qu'il serait s'arrêter en pleine expansion après un certain point, puis commence à défiler. J'ai simplement remplacé le onMeasure méthode dans le ScrollView.

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(300, MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

Cela pourrait ne pas fonctionner dans toutes les situations, mais il me donne les résultats nécessaires pour ma mise en page. Et il aborde également le commentaire de madhu.

Si certaines de mise en page-dessous de la scrollview alors cette astuce ne marchera pas – madhu Mar 5 à 4:36

77voto

JustinMorris Points 2173

Afin de créer un ScrollView ou ListView avec un maxHeight vous suffit de créer un Transparent LinearLayout autour d'elle avec une hauteur de ce que vous voulez l'maxHeight. Vous définissez ensuite la ScrollView Hauteur pour wrap_content. Cela crée un ScrollView qui semble grandir jusqu'à ce que sa hauteur est égale à la mère LinearLayout.

4voto

Derzu Points 2463

Il n'y a aucun moyen de définir maxHeight. Mais vous pouvez définir la Hauteur.

Pour cela, vous aurez besoin à la découverte de la hauteur de chaque point de vous scrollView. Après cela, il suffit de régler votre scrollView hauteur de numberOfItens * heightOfItem.

À la découverte de la hauteur d'un élément de le faire:

View item = adapter.getView(0, null, scrollView);
item.measure(0, 0);
int heightOfItem = item.getMeasuredHeight();

Pour régler la hauteur de le faire:

// if the scrollView already has a layoutParams:
scrollView.getLayoutParams().height = heightOfItem * numberOfItens;
// or
// if the layoutParams is null, then create a new one.
scrollView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, heightOfItem * numberOfItens));

1voto

Si quelqu'un envisage d'utiliser une valeur exacte pour LayoutParams par exemple

setLayoutParams(new LayoutParams(Y, X );

N'oubliez pas de tenir compte de la densité de l'écran de l'appareil sinon vous risquez d'obtenir très étrange comportement sur différents appareils. E. g:

Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics d = new DisplayMetrics();
display.getMetrics(d);
setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, (int)(50*d.density) ));

1voto

Bryan Denny Points 12910

Avez-vous essayé d'utiliser le layout_weight valeur? Si vous définissez une valeur supérieure à 0, il va s'étirer ce point de vue dans le reste de l'espace disponible.

Si vous aviez plusieurs points de vue qui devait être étiré, puis la valeur va devenir un poids entre eux.

Donc, si vous aviez deux points de vue à la fois ensemble à un layout_weight valeur de 1, alors qu'ils seraient à la fois les étirer pour remplir l'espace, mais ils auraient à la fois stretch pour un montant égal de l'espace. Si l'un d'entre eux à la valeur de 2, alors il serait étirement deux fois plus que l'autre point de vue.

Quelques infos ici énumérés en vertu de la Disposition Linéaire.

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