2017-12-29 18 views
0

Ich habe versucht, [https://medium.com/@nikhil4092/how-to-have-a-height-wrapping-viewpager-when-images-have-variable-heights-on-android-60b18e55e72e] diesen Link für die Höhe des viewpager Höhe wrap_content beziehen, aber es hat nicht funktioniert.Ich habe mehrere Fragen von Stackoverflow, aber keiner von ihnen konnte mein Problem anzugehen.Wenn ich bin geben die Höhe als wrap_content nichtsWie ViewPager die Höhe wrap_content

-Code angezeigt wird:

public class HeightWrappingViewPager extends ViewPager { 

public HeightWrappingViewPager(Context context) { 
    super(context); 
} 

public HeightWrappingViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    int mode = MeasureSpec.getMode(heightMeasureSpec); 
    // Unspecified means that the ViewPager is in a ScrollView WRAP_CONTENT. 
    // At Most means that the ViewPager is not in a ScrollView WRAP_CONTENT. 
    if (mode == MeasureSpec.UNSPECIFIED || mode == MeasureSpec.AT_MOST) { 
     // super has to be called in the beginning so the child views can be initialized. 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     int height = 0; 
     for (int i = 0; i < getChildCount(); i++) { 
      View child = getChildAt(i); 
      child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
      int h = child.getMeasuredHeight(); 
      if (h > height) height = h; 
     } 
     heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); 
    } 
    // super has to be called again so the new specs are treated as exact measurements 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 
} 

XML:

<com.project.test.HeightWrappingViewPager 
android:id="@+id/pager" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

Antwort

1

Ich bin nicht sicher, ob es dir hilft.
Ich habe den folgenden Code zu Bildern mit unterschiedlicher Höhe verwendet.
Fast wie Ihr Code, aber ich höhe wie ein Feld speichern.

public class MeasuredViewPager extends ViewPager { 

    private int mMaxHeight = 0; 

    public MeasuredViewPager(Context context) { 
     super(context); 
    } 

    public MeasuredViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     for (int i = 0; i < getChildCount(); i++) { 
      View child = getChildAt(i); 
      child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
      int h = child.getMeasuredHeight(); 
      if (h > mMaxHeight) mMaxHeight = h; 
     } 

if (mMaxHeight != 0) heightMeasureSpec = MeasureSpec.makeMeasureSpec(mMaxHeight, MeasureSpec.EXACTLY); 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

}

+0

Vielen Dank für Ihre Aufmerksamkeit, aber es kann nicht mein Problem lösen. Könnten Sie mir bitte mit Ihrem vollständigen Code helfen? –

Verwandte Themen