Câu hỏi Sự khác biệt giữa match_parent và fill_parent là gì?


Tôi hơi bối rối về hai thuộc tính XML: match_parent và fill_parent. Có vẻ như cả hai đều giống nhau. Có sự khác biệt nào giữa chúng không?


1262
2018-04-23 03:31


gốc




Các câu trả lời:


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 bằng cấp độ gốc (dấu trừ)

...

fill_parent: Chế độ xem phải lớn bằng bố cục (dấu trừ). Hằng số này không được chấp nhận 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


1158
2018-04-23 03:33



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? - Emerald Hieu
Phải có một số khác biệt đúng không? Nếu không, tại sao Google không dùng nữa và đổi tên thành cái mới? - rxlky
@Halim Không, có không có differece: Cả hai được định nghĩa là hằng số -1. Tôi bạn cảm thấy tốt hơn về nó, tôi không nhận được impovement trong đó hoặc là ... :-) - arpy
@ jlovison Không, không có sự khác biệt. Cả hai đều là -1. Bạn nhận được lỗi vì nền tảng cũ không biết về tên mới của hằng số rất giống nhau. - Tapirboy
Thật lạ lùng khi Android Studio vẫn đặt "fill_parent" trong tất cả các bố cục được tạo mẫu mặc định! Tôi biết họ là như nhau, nhưng tôi tiếp tục quay trở 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 có thực sự là một sự khác biệt. Nhóm Google / Android có thể thay đổi giá trị mặc định từ "fill_parent" thành "match_parent" không? Cảm ơn trước! :) - swooby


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

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

Cả hai hằng số đều giải quyết -1 cuố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õ những điều dường như đã thêm vào sự nhầm lẫn thay vì loại bỏ nó.


228
2017-12-11 13:23



... ngoại trừ con của RelativeLayout với width = match_parent và, nói, leftOf 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 nó. Điều đó chỉ phục vụ cho sự nhầm lẫn của CAUSE. - kaay
Vì FILL_PARENT và MATCH_PARENT có nghĩa là chế độ xem muốn lớn như bố mẹ của nó, trừ phần đệm của bố mẹ không phải là không gian bên trong chứ không phải là thứ nguyên bên ngoài? Bây giờ tôi thậm chí còn bối rối hơn! - Caltor
@ bnieland Tôi đã xóa các tham chiếu đến các 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/… mặc dù tôi có thể thấy một báo giá tương tự (không được chứng minh) tại sevennet.org/2014/11/22/… đó là nơi bạn có thể có thông tin của mình. - Caltor


Không có sự khác biệt về mặt chức năng, 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 khả dụng vì lý do tương thích.

LayoutParams.FILL_PARENT và LayoutParams.MATCH_PARENT cả hai đều có giá trị -1. Bạn không chắc chắn những gì google cám dỗ để thay đổi từ Fill Parent to Match Parent :)

Vì hầu hết các 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 chúng sẽ ngừng liên tục Fill Parent cũ!


22
2017-09-20 07:25





Để có khả năng tương thích, tốt hơn là nên điền vào fill_parent, tức là khi hỗ trợ các thiết bị API 8 bên dưới. 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ế.


10
2017-07-02 10:49



Chỉ có khả năng tương thích ngược. Nếu FILL_PARENT không được chấp nhận (như đã đề cập bởi Matt Ball ở trên), thì tùy chọn duy nhất để tương thích về phía trước là MATCH_PARENT.
Đồ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: 2.3.2.2.2.1 cho thời điểm 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 liên quan nữa và có thể đưa ra lời khuyên sai cho các nhà phát triển mới - Tim Castelijns


fill_parent (đã đổi tên MATCH_PARENT ở cấp API số 8 và cao hơn), có nghĩa là chế độ xem muốn lớn bằng bố cục của nó (trừ phần đệm)

fill_parent: Chế độ xem phải lớn bằng bố cục (dấu trừ). Hằng số này không được chấp nhận bắt đầu từ Cấp API số 8 và được thay thế bằng match_parent

Đối với API Android 1,6 đến 2.1  match_parent sẽ ném cho bạn một lỗi, vì vậy hãy sử dụng fill_parent trong những trường hợp này. Để hỗ trợ tính tương thích ngược, tốt hơn nên sử dụng fill_parent

  • Cả hai đều là hằng số tĩnh cuối cùng đại diện cho giá trị -1
  • FILL_PARENT không được chấp nhận ở cấp API số 8

Vậy MATCH_PARENT và FILL_PARENT có giống nhau không?

Vâng, MATCH_PARENT và FILL_PARENT chỉ là các tên hằng số khác nhau cho cùng một giá trị số nguyên (-1 nếu bạn tò mò) được sử dụng để chỉ định chế độ bố cục của Chế độ xem trong cha mẹ của nó.

Vậy tại sao MATCH_PARENT được thêm vào?

Tôi nhớ rằng Roman Guy (Nhà phát triển Android tại Google) đã nói rằng họ đã đổi tên vì "fill_parent"đã gây nhầm lẫn cho các nhà phát triển. Vì thực tế,"fill_parent"không điền vào khoảng trống còn lại (cho rằng bạn sử dụng thuộc tính weight) nhưng nó chiếm nhiều không gian như bố cục cha mẹ của nó. Đó là lý do tại sao tên mới là"match_parent"


10
2018-05-23 07:19





MATCH_PARENT và FILL_PARENTgiống nhau?

Vâng, MATCH_PARENT và FILL_PARENT chỉ là các tên hằng số khác nhau cho cùng một giá trị số nguyên (-1 nếu bạn tò mò) được sử dụng để chỉ định chế độ bố cục của Chế độ xem trong cha mẹ của nó.

Vậy tại sao MATCH_PARENT thêm?

Nhóm Android phát hiện rằng các nhà phát triển đã hiểu sai FILL_PARENT có nghĩa là View sẽ lấp đầy khoảng trống còn lại trong cha mẹ của nó. Trên thực tế, bằng cách chỉ định FILL_PARENT, các View đang yêu cầu lớn như cha mẹ của nó. Như vậy, (như được giải thích bởi chính Romain Guy trong video này vào khoảng 10:56) hằng số đã được đổi tên MATCH_PARENT để làm rõ việc sử dụng nó.

Được rồi, tôi hiểu cách FILL_PARENT/MATCH_PARENT công trinh. Có vấn đề gì nếu tôi sử dụng cái này hay cái kia?

FILL_PARENT không được chấp nhận. Bị từ chối không biến nó thành Ma Quỷ, nhưng cuối cùng nó sẽ biến mất. Ứng dụng của bạn sẽ sử dụng bằng chứng trong tương lai hơn MATCH_PARENT. Tại sao lại sử dụng tùy chọn không được chấp nhận khi tùy chọn hiện tại hoạt động giống hệt nhau?

Hơn nữa, FILL_PARENT thực sự gây hiểu lầm. Cá nhân tôi đã thấy mọi người bối rối vì nó không hoạt động theo cách họ nghĩ. Trong thực tế, tôi đã thấy một thẻ duy nhất sử dụng cả hai FILL_PARENT và MATCH_PARENT, bởi vì nhà phát triển nghĩ (dễ hiểu) rằng họ là hai chế độ bố cục khác nhau.

LÀM THẾ NÀO BẠN CÓ THỂ ĐƯỢC TRIPPED UP TRYING TO FILL_PARENT?

Dưới đây là ví dụ nhanh về cách MATCH_PARENT/FILL_PARENT sự nhầm lẫn có thể dẫn đến những người liên tục áp dụng đầu của họ vào bàn làm việc của họ. Đầu tiên, hãy thực hiện một bố cục rất đơn giản có chứa một vài View trường hợp.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <View
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="#FFFF00" />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:background="@android:color/black"
        android:text="@string/hello_world"
        android:padding="50dp" />
    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000" />

</LinearLayout>

6
2018-04-15 04:20



Làm thế nào là "phù hợp" một thuật ngữ ít khó hiểu, cho hành vi trong ví dụ xml của bạn? Vui lòng xem xét câu hỏi mở rộng đây. - kaay


FILL_PARENT không được dùng trong API cấp 8 và MATCH_PARENTsử dụng API cấp cao hơn


5
2017-09-24 06:56





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

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


5
2018-03-01 08:53





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


4
2018-04-17 11:34



Tôi không hiểu logic của mọi người khi họ tuyên bố điều này. Cha mẹ có đệm. Hoặc đứa trẻ bị bỏ rơi. Đứa trẻ có khớp không? Số là nó lấp đầy không gian còn lại? Ở đây trong những gì rõ ràng là Bizzarro World, chúng tôi trả lời: có. - kaay
@kaay Tôi hoàn toàn đồng ý với cái tên mới tồi tệ hơn cái cũ. Nhưng những gì Google nói đi. - Caltor