2011-12-16 62 views
7

Liệu ViewPager có phải là đối tượng duy nhất có trong bố cục hoạt động không? Tôi đang cố gắng để thực hiện một cái gì đó như thế này:Kích thước của ViewPager Android

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/reader_layout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<android.support.v4.view.ViewPager 
    android:id="@+id/page_viewer" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

<Gallery 
    android:id="@+id/miniatures_gallery" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /></LinearLayout> 

tôi nên có trường hợp pager lớn di chuyển trong đầu (và tôi có nó) và một bộ sưu tập nhỏ di chuyển dưới đó. Điều này chỉ cho tôi thấy máy nhắn tin chứ không phải bộ sưu tập. Bất kỳ đề xuất nào?

+1

thử này: http://helpmeco.de/2012/1/android-viewpager-and-gallery-integration – browep

+0

tnx này là tuyệt vời ... nhưng tôi đã có một vụ tai nạn trên trang xoay, bất kỳ đề nghị cho nó? –

+0

bạn có theo dõi ngăn xếp không? bạn đã lấy dự án từ github hoặc bạn đã sao chép dán từ hướng dẫn? – browep

Trả lời

6

ViewPager không hỗ trợ wrap_content vì nó (thường) không bao giờ có tất cả các con được tải cùng một lúc và do đó không thể có kích thước phù hợp (tùy chọn để có một máy nhắn tin thay đổi kích thước mỗi khi bạn có trang đã chuyển). Tuy nhiên, bạn có thể đặt thứ nguyên chính xác (ví dụ: 150dp) và match_parent cũng hoạt động.
Bạn cũng có thể sửa đổi kích thước động từ mã của mình bằng cách thay đổi height-thuộc tính trong số LayoutParams.

+0

ok cảm ơn nó đã làm việc với các kích thước cố định! –

+1

Điều gì không hiệu quả với nó? Một giải pháp, đó là hoạt động nếu bạn muốn các máy nhắn tin để điền vào bất kỳ không gian trống rỗng là thế này: \t \t Sau đó, máy nhắn tin để lại đủ dung lượng cho bất kỳ chế độ xem nào khác. – Jave

0

Tôi đã giải quyết được vấn đề với một vài lỗi. Dưới đây là những gì nó liên quan:

Trước tiên, tôi cần bố cục có thể bỏ qua giới hạn chiều cao của ViewPager. Đã sử dụng nó làm bố cục gốc cho ViewPager mục.

public class TallLinearLayout extends LinearLayout { 

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

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

    public TallLinearLayout(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, MeasureSpec.UNSPECIFIED); 
    } 
} 

sau đó tôi đã viết logic cho thay đổi kích thước ViewPager:

private class ViewPagerContentWrapper implements OnGlobalLayoutListener { 
    private ViewPager mViewPager; 

    public ViewPagerContentWrapper(ViewPager viewPager) { 
     mViewPager = viewPager; 
    } 

    @Override 
    public void onGlobalLayout() { 
     int position = mViewPager.getCurrentItem(); 
     check(position); 
     check(position + 1); 
    } 

    private void check(int position) { 
     ViewGroup vg = (ViewGroup) mViewPager.getChildAt(position); 
     View v = vg == null ? null : vg.getChildAt(0); 

     if (v != null) { 
      int height = v.getHeight(); 
      if (height > mViewPager.getHeight()) { 
       resize(height); 
      } 
     } 
    } 

    private void resize(int height) { 
     mViewPager.setLayoutParams(
       new LinearLayout.LayoutParams(
         LinearLayout.LayoutParams.MATCH_PARENT, 
         height 
       ) 
     ); 
    } 
} 

Mà tôi đăng ký như bố trí người nghe toàn cầu:

viewPager.getViewTreeObserver().addOnGlobalLayoutListener(new ViewPagerContentWrapper(viewPager)); 
+0

Điều này sẽ tạo ra một chu kỳ bố trí vô hạn. Ban đầu yêu cầu hệ thống onLayout sẽ gọi OnGlobalLayoutListener của bạn sẽ gọi onLayout sẽ gọi OnGlobalLayoutListener và như vậy ... –

4

Gán bố trí cân để xem pager như 1 & height = 0dp thay vì wrap_content

<android.support.v4.view.ViewPager 
    android:id="@+id/page_viewer" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1"/> 
+0

cách triển khai trên RelativeLayout? – lrn2prgrm

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