2009-01-11 70 views
236

Trong Android, khi bố trí các tiện ích con, sự khác biệt giữa fill_parent (match_parent trong API cấp 8 trở lên) và wrap_content là gì?Sự khác nhau giữa fill_parent và wrap_content là gì?

Có tài liệu nào bạn có thể trỏ đến không? Tôi quan tâm đến việc hiểu nó rất tốt.

+26

Lưu ý rằng 'fill_parent' đã được đổi tên thành' match_parent' trong API cấp 8 trở lên. – gfrigon

Trả lời

238

Có thể áp dụng thuộc tính cho kích thước ngang hoặc dọc của Chế độ xem (điều khiển trực quan). Nó được sử dụng để đặt kích thước Chế độ xem hoặc Bố cục dựa trên nội dung hoặc kích thước của bố cục đó thay vì chỉ định rõ thứ nguyên.

fill_parent (bị phản đối và đổi tên MATCH_PARENT trong API Cấp 8 và cao hơn)

Thiết cách bố trí của một widget để fill_parent sẽ buộc nó phải mở rộng để chiếm không gian nhiều như có sẵn trong các yếu tố bố trí nó được đặt vào. Nó tương đương với việc thiết lập kiểu dock của Windows Form Control thành Fill.

Đặt bố cục hoặc điều khiển cấp cao nhất thành fill_parent sẽ buộc nó chiếm toàn bộ màn hình.

wrap_content

Thiết kích thước của một Xem để wrap_content sẽ buộc nó để mở rộng chỉ đủ xa để chứa các giá trị (hay điều khiển con) mà nó chứa. Đối với điều khiển - như hộp văn bản (TextView) hoặc hình ảnh (ImageView) - điều này sẽ bao bọc văn bản hoặc hình ảnh được hiển thị. Đối với các yếu tố bố cục, nó sẽ thay đổi kích cỡ bố cục để phù hợp với các điều khiển/bố cục được thêm vào làm con của nó.

Nó gần tương đương với việc đặt thuộc tính Autosize của Kiểm soát biểu mẫu Windows thành True.

tài liệu trực tuyến

Có một số chi tiết trong tài liệu mã Android here.

+12

điều gì xảy ra nếu chiều rộng hình ảnh lớn hơn chiều rộng màn hình và tôi đặt chiều rộng hình ảnh là fill_parent. hình ảnh sẽ được nén thành kích thước màn hình? –

+0

@JohnWatson bạn có tìm thấy câu trả lời của mình không? Tôi cũng tò mò. – Rachael

+0

Thật tuyệt khi biết các thuộc tính tương đương của Windows Form Control được đề cập. – Rempelos

51
  • FILL_PARENT (đổi tên MATCH_PARENT trong API Cấp 8 và cao hơn), có nghĩa là rằng Xem muốn trở thành lớn như mẹ của nó (trừ đệm)

  • WRAP_CONTENT, có nghĩa là Xem muốn trở thành chỉ lớn đủ để kèm theo nội dung của nó (cộng đệm)

+0

Đệm -> đệm + lề? – user1076637

8
  • fill_parent sẽ làm cho chiều rộng hoặc chiều cao của phần tử thành lớn như phần tử gốc, nói cách khác là vùng chứa.

  • wrap_content sẽ làm cho chiều rộng hoặc chiều cao lớn đến mức cần thiết để chứa các phần tử bên trong.

Click here for ANDROID DOC Reference

+0

những gì sẽ là container? làm thế nào để bao quanh các quan điểm với các container khác nhau? –

2

fill_parent:

Một thành phần được sắp xếp bố trí cho các fill_parent sẽ bắt buộc phải mở rộng để điền vào đơn vị thành viên bố trí, càng nhiều càng tốt trong không gian. Điều này phù hợp với thuộc tính dockstyle của điều khiển Windows. Bố cục hoặc điều khiển được đặt hàng đầu là fill_parent sẽ buộc nó chiếm toàn bộ màn hình.

wrap_content

Thiết lập một cái nhìn của kích thước của wrap_content sẽ bị buộc phải nhìn được mở rộng để hiển thị tất cả các nội dung. Ví dụ, các điều khiển TextView và ImageView được đặt thành wrap_content sẽ hiển thị toàn bộ văn bản và hình ảnh nội bộ của nó. Phần tử bố cục sẽ thay đổi kích thước theo nội dung. Thiết lập chế độ xem kích thước của thuộc tính Tự động hóa wrap_content tương đương gần với việc đặt điều khiển Windows cho True.

Để biết chi tiết, vui lòng xem liên kết này: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

1

wrap_content thiết lập kích thước của một Xem đến minimum required to contain the contents it displays.

match_parentexpands View to match the available space within the parent View, Fragment, or Activity.

27

fill_parent (phản đối) = match_parent
Đường viền của chế độ xem con mở rộng để khớp với đường viền của chế độ xem chính.

wrap_content
Biên giới của cái nhìn con quấn khít xung quanh nội dung của riêng mình.

Dưới đây là một số hình ảnh để làm cho mọi thứ rõ ràng hơn. Màu xanh lục và đỏ là TextViews. Màu trắng là hiển thị LinearLayout.

enter image description here

Mỗi View (một TextView, một ImageView, một Button, vv) cần phải thiết lập các widthheight về quan điểm. Trong file layout xml, mà có thể trông như thế này:

android:layout_width="wrap_content" 
android:layout_height="match_parent" 

Bên cạnh đó thiết lập chiều rộng và chiều cao để match_parent hoặc wrap_content, bạn cũng có thể đặt chúng vào một số giá trị tuyệt đối:

android:layout_width="100dp" 
android:layout_height="200dp" 

Nói chung đó là tuy nhiên, không tốt vì nó không linh hoạt cho các thiết bị có kích thước khác nhau. Sau khi bạn đã hiểu được wrap_contentmatch_parent, điều tiếp theo cần tìm hiểu là layout_weight.

Xem thêm

XML cho hình ảnh trên

Dọc LinearLayout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="width=wrap height=wrap" 
     android:background="#c5e1b0"/> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="width=match height=wrap" 
     android:background="#f6c0c0"/> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="width=match height=match" 
     android:background="#c5e1b0"/> 

</LinearLayout> 

ngang LinearLayout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="WrapWrap" 
     android:background="#c5e1b0"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="WrapMatch" 
     android:background="#f6c0c0"/> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="MatchMatch" 
     android:background="#c5e1b0"/> 

</LinearLayout> 

Note

Lời giải thích trong câu trả lời này giả định không có margin or padding. Nhưng ngay cả khi có, khái niệm cơ bản vẫn như cũ. Biên giới/khoảng cách xem chỉ được điều chỉnh bằng giá trị của lề hoặc phần đệm.

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