2012-11-16 12 views
13

Próbuję umieścić ViewPager z różnymi fragmentami o różnych wysokościach. Wiem, że wrap_content nie działa z ViewPager, więc próbuję ustawić wysokość pagera dinamically. ja ustawiając wysokość pagera w stronę słuchacza:Dynamicznie ustawiana wysokość ViewPager

... 
     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())); 

       } 

      } 

Niestety to nie działa, ponieważ wartość zwrócona przez getMeasuredHeight() na Fragment jest źle. Co ja robię źle?

Odpowiedz

16

To jest moje rozwiązanie:

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

nazywam go w onResume();

+0

Ale OnGlobalLayoutListener nie jest wywoływany. Czemu? –

+0

Jesteś pewien? Zrobiłeś to i upewniłeś się, że tak nie jest? – czaku

+4

Co to jest FEATURED_IMAGE_RATIO ?? Próbuję go użyć na stronie fragmentagerager –

1

spróbuj ustawić jego parametry w onLayout() z viewpager

+0

A więc sugerujesz rozszerzyć viewPager? Problem polega na tym, że pager powinien mieć wysokość wyświetlanego fragmentu, więc nie rozumiem, jak można to rozwiązać w onLayout(). – Matroska

Powiązane problemy