2013-08-25 11 views
18

In Android, come è possibile creare una vista a scorrimento con altezza massima e avvolgere il contenuto, in pratica avvolge il contenuto verticalmente, ma ha un'altezza massima?Come impostare l'altezza massima con il contenuto dell'involucro in Android?

ho cercato

<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> 

Ma questo non sta funzionando?

+0

ecco un'altra soluzione al problema: https://stackoverflow.com/questions/42694355/how-to-set-recyclerview-max-height/48970129#48970129 – user1506104

risposta

-4

Qui è possibile impostare l'altezza della vostra Scrollview come questo -:

<ScrollView 
android:id="@+id/scrollView1" 
android:layout_width="match_parent" 
android:layout_height="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> 
+0

Certamente non risponde alla domanda! – Maverick283

16

ho esteso ScrollView e il codice aggiunto a implementare questa funzione:

https://gist.github.com/JMPergar/439aaa3249fa184c7c0c

spero che essere utile .

+1

Questa implementazione funziona contemporaneamente. L'unica cosa che vorrei aggiungere è il parametro maxHeight in un file/res/values ​​/ attrs.xml per poterlo specificare direttamente nell'XML (http://developer.android.com/training/custom-views/create -view.html # customattr) – DNax

11

È possibile farlo a livello di programmazione.

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; 
    } 
} 

E aggiungere ascoltatore alla vista:

view.getViewTreeObserver() 
        .addOnGlobalLayoutListener(new OnViewGlobalLayoutListener(view)); 

Listener chiamerà il metodo onGlobalLayout(), quando vista l'altezza sarà cambiato.

+0

Penso che sia necessario rimuovere 'void' sul costruttore' OnViewGlobalLayoutListener (Visualizza vista) '. – Alex

20

è possibile aggiungere questo a qualsiasi vista (ignorare onMeasure in una classe ereditata da una vista)

@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); 
} 
+0

Funziona. Piace. A. Fascino. –

+0

Grazie! funziona – Leon

+0

Se funziona perfettamente. Grazie mille! – Duyhungws

0

in altezza insieme ScrollView è necessario utilizzare 2 linerlayout all'interno impostare insieme e poi vista scrool come loro bambino quindi impostare layout di linerlayout medio: altezza per limite altezza scrollview.

Problemi correlati