Sous Android, comment créer une vue de défilement d'une hauteur maximale et envelopper le contenu; en principe, elle enveloppe le contenu verticalement, mais a une hauteur maximale?
J'ai essayé
<ScrollView
Android:id="@+id/scrollView1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:maxHeight="200dp"
Android:layout_alignParentBottom="true" >
<LinearLayout
Android:id="@+id/maincontainer"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
</LinearLayout>
</ScrollView>
Mais ça ne marche pas?
vous pouvez l'ajouter à n'importe quelle vue (surcharger onMeasure dans une classe héritée d'une vue)
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (maxHeight > 0){
int hSize = MeasureSpec.getSize(heightMeasureSpec);
int hMode = MeasureSpec.getMode(heightMeasureSpec);
switch (hMode){
case MeasureSpec.AT_MOST:
heightMeasureSpec = MeasureSpec.makeMeasureSpec(Math.min(hSize, maxHeight), MeasureSpec.AT_MOST);
break;
case MeasureSpec.UNSPECIFIED:
heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST);
break;
case MeasureSpec.EXACTLY:
heightMeasureSpec = MeasureSpec.makeMeasureSpec(Math.min(hSize, maxHeight), MeasureSpec.EXACTLY);
break;
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
J'ai étendu ScrollView et ajouté du code pour implémenter cette fonctionnalité:
https://Gist.github.com/JMPergar/439aaa3249fa184c7c0c
J'espère que ça vous sera utile.
Vous pouvez le faire par programme.
private static class OnViewGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {
private final static int maxHeight = 130;
private View view;
public OnViewGlobalLayoutListener(View view) {
this.view = view;
}
@Override
public void onGlobalLayout() {
if (view.getHeight() > maxHeight)
view.getLayoutParams().height = maxHeight;
}
}
Et ajoutez un auditeur à la vue:
view.getViewTreeObserver()
.addOnGlobalLayoutListener(new OnViewGlobalLayoutListener(view));
Listener appellera la méthode onGlobalLayout () lorsque la hauteur de la vue sera modifiée.
pour définir la hauteur de la vue de défilement, vous devez utiliser 2 couches linéaires à l'intérieur, puis définir la vue de défilement comme enfants, puis définir la disposition milieu de la couche: hauteur pour limiter la hauteur de la vue.