2012-11-16 9 views
13

Ich versuche, eine ViewPager mit verschiedenen Fragmenten mit verschiedenen Höhen zu setzen. Ich weiß, dass wrap_content nicht mit ViewPager funktioniert, also versuche ich pager Höhe Dinamically. Ich gründe die Pager-Höhe auf einer Seite Zuhörer:Dynamisch SetPager Höhe

... 
     indicator.setOnPageChangeListener(new OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int selected) { 
       final View view = fragments[selected].getView(); 
       if (view != null) { 
        pager.setLayoutParams(new LayoutParams(
          LayoutParams.MATCH_PARENT, view 
            .getMeasuredHeight())); 

       } 

      } 

Leider ist es nicht funktioniert, weil der Wert wieder durch getMeasuredHeight() auf Fragment falsch ist. Was mache ich falsch?

Antwort

16

Das ist meine Lösung zu setzen:

ViewTreeObserver viewTreeObserver = mViewPager.getViewTreeObserver(); 
    viewTreeObserver 
      .addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

       @Override 
       public void onGlobalLayout() { 

        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
          LinearLayout.LayoutParams.WRAP_CONTENT, 
          LinearLayout.LayoutParams.WRAP_CONTENT); 

        int viewPagerWidth = mViewPager.getWidth(); 
        float viewPagerHeight = (float) (viewPagerWidth * FEATURED_IMAGE_RATIO); 

        layoutParams.width = viewPagerWidth; 
        layoutParams.height = (int) viewPagerHeight; 

        mViewPager.setLayoutParams(layoutParams); 
        mViewPager.getViewTreeObserver() 
          .removeGlobalOnLayoutListener(this); 
       } 
      }); 

ich es in onResume nennen();

+0

Aber OnGlobalLayoutListener wird nicht aufgerufen. Warum? –

+0

Sind Sie sicher? Hast du es eingeloggt und sichergestellt, dass es nicht ist? – czaku

+4

Was ist das FEATURED_IMAGE_RATIO? Ich versuche, es auf einem FragmentpageRadapter zu verwenden –

1

versuchen, seine Parameter in onLayout-() den viewpager

+0

also schlagen Sie vor, den viewPager zu erweitern? Das Problem ist, dass der Pager die Höhe des angezeigten Fragments haben sollte, also verstehe ich nicht, wie dies in onLayout() gelöst werden könnte. – Matroska

Verwandte Themen