2013-03-17 5 views
19

Tôi có một ViewPager và một ActionBar với các tab. Một trong các tab này có một ListView và khi tôi gõ vào một trong các tùy chọn trong ListView đó, tôi thêm một Fragment con là khung nhìn chi tiết cho hàng đó.Xem trong ScrollView không phù hợp với cha mẹ như được cấu hình

Chế độ xem chi tiết đó là ScrollView có LinearLayout bên trong nó. ScrollView là match_parent/match_parent và LinearLayout bên trong nó là width=match_parentheight=wrap_content. Trên trình mô phỏng kích thước điện thoại, chế độ xem chi tiết lấp đầy màn hình như mong muốn, nhưng trên máy tính bảng, chế độ xem chi tiết chỉ bao gồm một phần chiều rộng của màn hình ... mặc dù chiều rộng của ScrollView và chiều rộng của LinearLayout là cả match_parent.

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rootView" style="@style/RootScrollView"> 

    <LinearLayout android:id="@+id/scrollContentView" style="@style/ScrollViewContent"> 
     ... 
    </LinearLayout> 
</ScrollView> 

Đây là phong cách cho xem di chuyển:

<style name="RootScrollView"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">match_parent</item> 
</style> 

Đây là kiểu cho LinearLayout nội dung:

<style name="ScrollViewContent"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:paddingLeft">15dp</item> 
    <item name="android:paddingRight">15dp</item> 
    <item name="android:orientation">vertical</item> 
    <item name="android:background">@drawable/image_legal_paper_tile</item> 
</style> 

Quan điểm nội dung có nền lặp đi lặp lại image_legal_paper_tile đó là này :

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/legal_paper_tile" 
    android:gravity="fill_horizontal" 
    android:tileMode="repeat" /> 

Vì vậy, hình ảnh sẽ kéo dài theo chiều ngang và lặp lại tạo ra một miếng giấy trắng hợp pháp trong nền.

Đây là những gì các danh sách và xem chi tiết trông giống như giả lập điện thoại:

enter image description here

Đây là những gì các danh sách và chi tiết xem cái nhìn giống như trên một viên thuốc thật. Mảnh pad pháp lý màu vàng NÊN được lấp đầy toàn bộ chiều rộng của màn hình, nhưng không phải.

enter image description here

EDIT:

Dưới đây là hình ảnh giấy tờ hợp lệ nền:

enter image description here

Đó là 320px rộng. Bộ mô phỏng điện thoại rộng 480px và hình ảnh trải dài, chính xác, để lấp đầy chiều rộng của màn hình. Sau đó nó lặp lại theo chiều dọc như dự định. Tuy nhiên, nó không kéo dài để lấp đầy chiều rộng của màn hình trên máy tính bảng.

Chiều rộng được hiển thị trên máy tính bảng KHÔNG phải là kích thước gốc của hình ảnh vì nó thay đổi kích thước dựa trên nội dung. Khi đoạn tải đầu tiên, nó là một chiều rộng. Sau đó, tôi điền vào các trường và thực hiện phép tính để thêm một số văn bản ở cuối chế độ xem nội dung. Văn bản đó rộng hơn nội dung hiện có và do đó khi văn bản được đặt, chiều rộng của đoạn sẽ tăng để hỗ trợ nội dung rộng hơn.

Vì vậy, trong ngắn hạn, không, chiều rộng trên máy tính bảng không phải là kích thước gốc của hình ảnh. Hình ảnh IS kéo dài, không kéo dài tất cả.

+0

Chỉ sử dụng một bố cục cho tất cả kích thước bố cục? Hình nền của bạn lớn đến mức nào? Kích thước hình nền có được hiển thị trên máy tính bảng không? Sau đó, nó có thể là một vấn đề lặp lại gạch (cho rằng có thể kiểm tra này [link] (http://stackoverflow.com/questions/4077487/background-image-not-repeating-in-android-layout)). – abbath

+0

Chiều rộng được hiển thị trên máy tính bảng KHÔNG phải là kích thước gốc của hình ảnh, bởi vì nó thay đổi kích thước dựa trên nội dung. Khi đoạn tải đầu tiên, nó là một chiều rộng. Sau đó, tôi điền vào các trường và thực hiện phép tính để thêm một số văn bản ở cuối chế độ xem nội dung. Văn bản đó rộng hơn nội dung hiện có và do đó khi văn bản được đặt, chiều rộng của đoạn sẽ tăng để hỗ trợ nội dung rộng hơn. –

+0

nếu bạn sử dụng lề bố trí trong bố cục tuyến tính của con bạn cuộn, bạn nên thay đổi nó thành đệm để hoạt động đúng. –

Trả lời

68

trên scrollview sử dụng android:fillViewport="true" và cho con của scrollview android:height="wrap_content". nếu bạn muốn có nhiều đứa trẻ với các thuộc tính khác nhau thì hãy tạo một đứa trẻ chính làm thùng chứa. đặt anh ta là wrap_content và con của anh ta là match_parent.

dụ:

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true"> 

    <LinearLayout 
     android:id="@+id/dynamic_frame" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <LinearLayout 
      android:id="@+id/dimrix_sub_child" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:visibility="gone" > 
     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/dimrix_sub_child_21" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:visibility="gone" > 
     </LinearLayout> 
    </LinearLayout> 
</ScrollView> 

là ví dụ này tôi có thể thiết lập tầm nhìn trong mã cho mỗi đứa trẻ và ông sẽ phù hợp với cha mẹ như bạn muốn.

+1

Đặt fillViewport thành true đã giúp tôi trong trường hợp của tôi. – Scadge

+5

Cảm ơn bạn! Bạn vừa mới cứu tôi rất nhiều giờ! – marienke

+0

bạn hoan nghênh (-: –

0

Tôi đã tìm ra giải pháp thay thế, nhưng tôi sẽ không chấp nhận câu trả lời này và hy vọng ai đó sẽ tìm thấy câu trả lời thực sự.

Trong phần xem danh sách của tôi, trình xử lý onListItemClick(), tôi đặt một vài thuộc tính (minWidth và minHeight) trên đoạn chi tiết.Sau đó, trong phương thức onCreateView() của đoạn chi tiết, tôi đặt chiều rộng và chiều cao tối thiểu cho giá trị đó.

Đoạn chi tiết sau đó đúng lấp đầy không gian và vẫn cho phép di chuyển vv

3

Hãy thử thêm android: fillViewport = "true" để scrollview của bạn

nhớ android rằng: ‘thiết lập chiều cao với chiều cao của cha mẹ’ layout_height =”fill_parent” nghĩa này rõ ràng là không phải những gì bạn muốn khi sử dụng ScrollView. Sau khi tất cả, ScrollView sẽ trở nên vô dụng nếu nội dung của nó luôn cao như bản thân nó. Để giải quyết vấn đề này, bạn cần sử dụng thuộc tính ScrollView được gọi là android: fillViewport. Khi được đặt thành true, thuộc tính này sẽ khiến con của chế độ xem cuộn mở rộng đến chiều cao của ScrollView nếu cần. Khi con cao hơn ScrollView, thuộc tính không có hiệu lực.