2016-09-27 11 views
1

Ich habe einen Viewpager, der Elemente in einem 3 x 3 anzeigt. Dieser Viewpager ist Teil eines Layouts mit anderen Ansichten, so dass die Höhe basierend auf der Anzahl der Elemente auf der Seite dynamisch festgelegt werden muss.So fügen Sie dynamische Viewpager-Höhe hinzu

Auf der Grundlage dieser Frage ich eine benutzerdefinierte viewpager erstellt haben die onMeasure wie zwingende so:

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     try { 
      View child = getChildAt(mCurrentPagePosition); 
      if (child != null) { 
       child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
       int h = child.getMeasuredHeight() * 3; 
       heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY); 

      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     int count = this.getChildCount(); 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 

Das die Viewpager erweitert, wie dies in einer Reihe drei Elemente anzuzeigen:

Viewpager showing three rows

Ich bin auf der Suche nach einer Möglichkeit, die Höhe entweder

int h = child.getMeasuredHeight() * 1; 
dynamisch festzulegen 0

oder

int h = child.getMeasuredHeight() * 3; 

Basierend auf der Anzahl der Elemente in Seite angezeigt, so kann ich die Höhe dynamisch schrumpfen. Jeder Zeiger wird geschätzt.

Viewpager showing two rows

und

Viewpager showing two rows

Antwort

1

Wie über Sie setMeasuredDimension mit den gewünschten Abmessungen nennen?

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    try { 
     View child = getChildAt(mCurrentPagePosition); 
     if (child != null) { 
      child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
      int h = child.getMeasuredHeight() * 3; 
      heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY); 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    int count = this.getChildCount(); 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    setMeasuredDimension(widthMeasureSpec, h); 
} 

Löst dies Ihr Problem?

+0

Danke, aber das hat die Höhe des Viewpagers nicht verändert. Es gab mir einige Denkanstöße und ich werde weiter erforschen / –