2012-11-16 15 views
13

Sto provando a inserire uno ViewPager con diversi frammenti con altezze diverse. So che wrap_content non funziona con ViewPager quindi sto provando a impostare l'altezza del pager dinamicamente. io pongo l'altezza pager in una pagina ascoltatore:Imposta dinamicamente l'altezza di 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())); 

       } 

      } 

Purtroppo non funziona perché il valore restituito da getMeasuredHeight() su Fragment è sbagliato. Che cosa sto facendo di sbagliato?

risposta

16

Questa è la mia soluzione:

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

mi chiamano in onResume();

+0

Ma OnGlobalLayoutListener non viene chiamato. Perché? –

+0

Sei sicuro? Lo hai registrato e fatto in modo che non lo sia? – czaku

+4

Che cos'è il FEATURED_IMAGE_RATIO ?? Sto cercando di usarlo su un frammentpageradapter –

1

cercare di impostare i parametri in onLayout() della viewpager

+0

quindi stai suggerendo di estendere il viewPager? Il problema è che il cercapersone dovrebbe avere l'altezza del frammento visualizzato, quindi non capisco come questo possa essere risolto in onLayout(). – Matroska

Problemi correlati