Sự khác biệt giữa match_parent và fill_parent là gì?


Câu trả lời:


1235

Chúng giống nhau (trong API cấp 8+). Sử dụng match_parent.

FILL_PARENT (được đổi tên thành MATCH_PARENT trong API cấp 8 trở lên), có nghĩa là chế độ xem muốn lớn như cha mẹ của nó (trừ phần đệm)

...

fill_parent: Chế độ xem phải lớn như cha mẹ của nó (trừ phần đệm). Hằng số này không được dùng nữa bắt đầu từ API Cấp 8 và được thay thế bằng match_parent.

http://developer.android.com/reference/android/view/Viewgroup.LayoutParams.html


5
Nếu tôi viết ứng dụng cho cả 1.6 và 2.2, tôi sẽ sử dụng fill_parent để tương thích, đúng không?
emeraldhieu

12
Phải có một số khác biệt phải không? Nếu không thì tại sao Google lại từ chối nó và đổi tên thành cái mới?
kẹt vào

49
@Halim Không, không có sự khác biệt : Cả hai đều được định nghĩa là hằng số -1. Tôi cảm thấy tốt hơn về điều đó, tôi cũng không nhận được sự thúc đẩy trong đó ... :-)
arpy

2
@jlovison Không, không có sự khác biệt. Cả hai đều như vậy -1. Bạn gặp lỗi vì nền tảng cũ hơn không biết về tên mới của hằng số rất giống nhau.
Tapirboy 30/1/2015

16
Thật kỳ lạ khi Android Studio vẫn đặt "fill_parent" trong tất cả các bố cục được tạo mặc định! Tôi biết họ giống nhau, nhưng tôi tiếp tục quay lại câu hỏi SO này mỗi năm để đảm bảo không ai phát hiện ra rằng thực sự có một sự khác biệt. Nhóm Google / Android có thể vui lòng thay đổi giá trị mặc định từ "fill_parent" thành "match_parent" không? Cảm ơn trước! :)
swooby

246

Google đã thay đổi tên để tránh nhầm lẫn.

Vấn đề với tên cũ fill parentlà nó ngụ ý ảnh hưởng đến kích thước của cha mẹ, trong khi match parentmô tả tốt hơn hành vi kết quả - khớp với kích thước với cha mẹ.

Cả hai hằng số giải quyết -1cuối cùng, và do đó dẫn đến hành vi giống hệt nhau trong ứng dụng. Trớ trêu thay, sự thay đổi tên này được thực hiện để làm rõ mọi thứ dường như đã thêm sự nhầm lẫn thay vì loại bỏ nó.


17
... ngoại trừ với con của RelativeLayout với width = match_parent và, giả sử, còn lại một cái khác. Nó không phù hợp với kích thước của cha mẹ nó, nó lấp đầy những gì còn lại trong đó. Điều đó chỉ phục vụ cho sự nhầm lẫn NGUYÊN NHÂN.
kaay

7
Vì FILL_PARENT và MATCH_PARENT có nghĩa là chế độ xem muốn lớn như cha mẹ của nó, trừ phần đệm của cha mẹ không phải là không gian bên trong chứ không phải kích thước bên ngoài? Bây giờ tôi còn bối rối hơn nữa!
Caltor

@bnieland Tôi đã xóa các tham chiếu đến kích thước bên trong và bên ngoài vì chúng không đồng ý với tài liệu google tại developer.android.com/reference/android/view/ trộm mặc dù tôi có thể thấy một trích dẫn tương tự (không có căn cứ) tại Sevennet.org / 2014/11/22 / Hoài đó là nơi bạn có thể đã nhận được thông tin của mình.
Caltor

28

Về mặt chức năng không có sự khác biệt, Google chỉ thay đổi tên từ fill_parent thành match_parent, từ API cấp 8 (Android 2.2). FILL_PARENT vẫn có sẵn vì lý do tương thích.

LayoutParams.FILL_PARENTLayoutParams.MATCH_PARENTcả hai đều có giá trị -1. Không chắc chắn điều gì đã cám dỗ google thay đổi từ Fill Parent thành Match Parent :)

Vì hầu hết phones are >= Android 2.2.. bạn nên sử dụng Match Parent để tương thích trong tương lai ... không chắc chắn khi nào họ sẽ ngừng hằng số Fill Parent cũ hơn!


11

Để tương thích, tốt hơn hết là bạn nên sử dụng fill_parent, khi hỗ trợ bên dưới các thiết bị API 8. Nhưng nếu ứng dụng của bạn nhắm mục tiêu API 8 trở lên, bạn nên sử dụng match_parent thay thế.


8
Chỉ tương thích ngược mặc dù. Nếu FILL_PARENTkhông được dùng nữa (như Matt Ball đã đề cập ở trên), thì tùy chọn duy nhất cho khả năng tương thích về phía trước là MATCH_PARENT.

2
Đồng ý nhưng nếu bạn có kế hoạch viết mã cho các thiết bị cấp API thấp hơn, ví dụ: 2.3.2.2.2.1 vào lúc này bạn cần sử dụng FILL_PARENT. Tôi gặp một số vấn đề khi sử dụng match_parent cho các phiên bản cũ hơn.
MSA

đã đến lúc xóa câu trả lời này. Nó không còn phù hợp nữa và có thể đưa ra lời khuyên sai cho các nhà phát triển mới
Tim

8

FILL_PARENTkhông được dùng trong API cấp 8 và MATCH_PARENTsử dụng API highlevel


8

match_parent được sử dụng thay cho fill_parent và đặt nó đi xa như cha mẹ đi. Chỉ cần sử dụng match_parent và quên đi fill_parent . Tôi đã bỏ hoàn toàn fill_parent và mọi thứ vẫn hoàn hảo như bình thường.

Kiểm tra ở đây để biết thêm.


6

Chỉ cần đặt cho nó một cái tên gần với hành động thực tế của nó . "fill_parent"không lấp đầy khoảng trống còn lại như tên sẽ ngụ ý (đối với việc bạn sử dụng thuộc tính weight). Thay vào đó, nó chiếm nhiều không gian như bố mẹ của nó. Đó là lý do tại sao tên mới là"match_parent"


2
Tôi không hiểu logic của mọi người khi họ nói điều này. Cha mẹ có đệm. Hoặc con còn lại. Là đứa trẻ phù hợp với nó? Không. Nó có lấp đầy không gian còn lại không? Ở đây trong thế giới rõ ràng là Bizzarro, chúng tôi trả lời: có.
kaay

1
@kaay Tôi hoàn toàn đồng ý tên mới tệ hơn tên cũ. Nhưng những gì Google nói đi.
Caltor 4/2/2015

6

Cả hai đều có chức năng tương tự chỉ khác nhau là fill_parent được sử dụng tối đa API cấp 8 và match_parent được sử dụng sau cấp độ API 8 trở lên.


6

Khi bạn đặt bố cục widthheight như match_parenttrong thuộc XMLtính, nó sẽ chiếm toàn bộ diện tích mà chế độ xem cha có, tức là nó sẽ lớn như bố mẹ.

<LinearLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="#f9b0b0">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#b0f9dc"/>

</LinearLayout>

Hare cha mẹ là màu đỏ và con màu xanh lá cây. Con chiếm hết diện tích. Bởi vì nó là widthheightmatch_parent.

nhập mô tả hình ảnh ở đây

Lưu ý: Nếu cha mẹ được áp dụng một phần đệm thì không gian đó sẽ không được bao gồm.

<LinearLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="#f9b0b0"
    android:paddingTop="20dp"
    android:paddingBottom="10dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#b0f9dc"/>

</LinearLayout>

nhập mô tả hình ảnh ở đây

Vậy TextView hight = 300dp (hight cha) - (20 (paddingTop) +10 (paddingBottom)) = (300 - 30) dp = 270 dp

fill_parent Vs match_parent

fill_parent là tên trước đó của match_parent

Đối với API cấp 8 trở lên được fill_parentđổi tên thành match_parentfill_parenthiện không được chấp nhận.

Vì vậy fill_parentmatch_parentlà như nhau.

Tài liệu API cho fill_parent

Khung nhìn phải lớn như cha mẹ của nó (trừ phần đệm). Hằng số này không được dùng nữa bắt đầu từ API Cấp 8 và được thay thế bằng {@code match_parent}.


4

match_parent, có nghĩa là chế độ xem muốn lớn như cha mẹ của nó (trừ phần đệm).

quấn_content, có nghĩa là khung nhìn muốn đủ lớn để bao quanh nội dung của nó (cộng với phần đệm)

Để minh họa tốt hơn, tôi đã tạo ra một bố cục mẫu thể hiện khái niệm này. Để thấy hiệu quả của nó, tôi đã thêm một đường viền của từng nội dung textView.

Trong nội dung textView "Match Parent", chúng ta có thể thấy chiều rộng bố cục của nó trải rộng ra toàn bộ chiều dài của nó.

Nhưng chúng ta có thể thấy trong nội dung textView "Wrap Content", chiều rộng bố cục của nó được bao bọc bởi chiều dài của nội dung (Wrap Content).

Giao diện Android


4

match_parentfill_parent là cùng một thuộc tính, được sử dụng để xác định chiều rộng hoặc chiều cao của chế độ xem trong toàn màn hình theo chiều ngang hoặc chiều dọc.

Các thuộc tính này được sử dụng trong các tệp xml android như thế này.

 android:layout_width="match_parent"
 android:layout_height="fill_parent"

hoặc là

 android:layout_width="fill_parent"
 android:layout_height="match_parent"

fill_parentđã được sử dụng trong các phiên bản trước, nhưng bây giờ nó đã bị phản đối và được thay thế bởi match_parent. Tôi hy vọng nó sẽ giúp bạn.


3

fill_parent: Chế độ xem phải lớn như cha mẹ của nó.

bây giờ nội dung này fill_parent không được dùng nữa và được thay thế bằng match_parent.


3

Để tôi điền cha mẹkhớp cha mẹ chỉ thực hiện cùng một chức năng:

điền cha : Đã được sử dụng trước API 8

phù hợp với cha mẹ Điều này đã được sử dụng từ API 8+ Chức năng của cả hai Điền khung nhìn cha sang một bên phần đệm


2

FILL_PARENT đã được đổi tên thành MATCH_PARENT trong API cấp 8 trở lên, điều đó có nghĩa là chế độ xem muốn lớn như cha mẹ của nó (trừ phần đệm) - Google


2

FILL_PARENT không được chấp nhận từ API cấp 8 trở lên và được đổi tên cho các phiên bản trên là MATCH_PARENT

Cả hai đều giống nhau FILL_PARENTMATCH_PARENT, FILL_PARENTđược sử dụng trong phiên bản thấp hơn API cấp 8 và MATCH_PATENT được sử dụng ở cấp API cao hơn lớn hơn 8.

FILL_PARENT(được đổi tên MATCH_PARENTtrong API Cấp 8 trở lên), điều đó có nghĩa là chế độ xem muốn lớn như cha mẹ của nó (trừ phần đệm)

fill_parent: Chế độ xem phải lớn như cha mẹ của nó (trừ phần đệm). Hằng số này không được dùng nữa bắt đầu từ API Cấp 8 và được thay thế bằng match_parent.

Để biết thêm chi tiết xin vui lòng ghé thăm này trang


0

1. match_parent

Khi bạn đặt chiều rộng và chiều cao bố cục là match_parent, nó sẽ chiếm toàn bộ diện tích mà chế độ xem cha có, tức là nó sẽ lớn như bố mẹ.

Lưu ý : Nếu cha mẹ được áp dụng một phần đệm thì không gian đó sẽ không được bao gồm.

Khi chúng tôi tạo một layout.xml theo mặc định, chúng tôi có RelativeLayout là cha mẹ mặc định Xem với android: layout_creen = "match_parent" và android: layout_height = "match_parent" tức là nó chiếm toàn bộ chiều rộng và chiều cao của màn hình di động.

Cũng lưu ý rằng phần đệm được áp dụng cho tất cả các mặt,

android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"

Bây giờ, hãy thêm một chế độ xem tuyến tính phụ tuyến tính và đặt layout_ference = "match_parent" và layout_height = "match_parent", chế độ xem đồ họa sẽ hiển thị như thế này,

match_parent_example

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.code2care.android.togglebuttonexample.MainActivity" >

android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="11dp"
android:background="#FFFFEE"
android:orientation="vertical" >

2. fill_parent:

Điều này giống như match_parent, fill_parent đã bị khấu hao ở cấp độ API 8. Vì vậy, nếu bạn đang sử dụng API cấp 8 trở lên, bạn phải tránh sử dụng fill_parent

Hãy làm theo các bước tương tự như chúng tôi đã làm cho match_parent, thay vào đó chỉ sử dụng fill_parent ở mọi nơi.

Bạn sẽ thấy rằng không có sự khác biệt trong hành vi trong cả fill_parent và cha mẹ khớp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.