web-dev-qa-db-de.com

Wie kann ich eine maximale Höhe mit Umbruchinhalt in Android einstellen?

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?

24
omega

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);
}
26
babay

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.

18
JMPergar

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.

15
harmashalex

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.

0
Rasool_sof