2012-11-16 41 views
13

Tôi đang cố gắng đặt ViewPager với các đoạn khác nhau có độ cao khác nhau. Tôi biết rằng wrap_content không hoạt động với ViewPager vì vậy tôi đang cố gắng đặt chiều cao máy nhắn tin theo chế độ ăn tối. Tôi đang thiết lập chiều cao pager trong một listener page:Tự động đặt chiều cao 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())); 

       } 

      } 

Đáng tiếc là nó không làm việc vì giá trị trả về bởi getMeasuredHeight() trên Fragment là sai. Tôi đang làm gì sai?

Trả lời

16

Đây là giải pháp của tôi:

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

tôi gọi nó trong onResume();

+0

Nhưng OnGlobalLayoutListener không được gọi. Tại sao? –

+0

Bạn có chắc chắn không? Bạn đã đăng nhập và chắc chắn nó không phải là? – czaku

+4

FEATURED_IMAGE_RATIO là gì ?? Tôi đang cố gắng sử dụng nó trên một fragmentpageradapter –

1

Cố gắng thiết lập các thông số của nó trong onLayout() của ViewPager

+0

vì vậy bạn có đề xuất mở rộng viewPager không? Vấn đề là máy nhắn tin nên có chiều cao của đoạn được hiển thị, vì vậy tôi không hiểu làm thế nào điều này có thể được giải quyết trong onLayout(). – Matroska

Các vấn đề liên quan