Wie können Sie in Android eine Bildlaufansicht erstellen, die eine maximale Höhe hat, und den Inhalt umschließen, im Wesentlichen den Inhalt vertikal umschließen, jedoch eine maximale Höhe hat?
Ich habe es versucht
<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>
Aber das funktioniert nicht?
sie können dies zu jeder Ansicht hinzufügen (onMeasure in einer von einer Ansicht geerbten Klasse überschreiben).
@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);
}
Ich habe ScrollView erweitert und Code hinzugefügt, um diese Funktion zu implementieren:
https://Gist.github.com/JMPergar/439aaa3249fa184c7c0c
Ich hoffe das wird nützlich sein.
Sie können es programmgesteuert machen.
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;
}
}
Und fügen Sie der Ansicht Listener hinzu:
view.getViewTreeObserver()
.addOnGlobalLayoutListener(new OnViewGlobalLayoutListener(view));
Listener ruft die Methode onGlobalLayout () auf, wenn die Ansichtshöhe geändert wird.
für die festgelegte Höhe der Bildlaufansicht müssen Sie zwei lineare Lagen innen zusammen verwenden und dann die Ansichtsansicht als untergeordnetes Element festlegen. Dann das Layout für das mittlere lineare Bildlayout einstellen: Höhe für die maximale Bildlaufansicht.