ความแตกต่างระหว่าง fill_parent และ wrap_content คืออะไร


276

ใน Android เมื่อเลย์เอาต์วิดเจ็ตอะไรคือความแตกต่างระหว่างfill_parent( match_parentในระดับ API 8 และสูงกว่า) และwrap_contentอะไร

มีเอกสารใดบ้างที่คุณสามารถชี้ไปที่ได้หรือไม่ ฉันสนใจที่จะเข้าใจมันเป็นอย่างดี


33
รับทราบว่าfill_parentถูกเปลี่ยนชื่อmatch_parentในระดับ API 8 ขึ้นไป
gfrigon

คำตอบ:


266

แอ็ตทริบิวต์ทั้งสามารถนำไปใช้กับขนาดแนวนอนหรือแนวตั้งของมุมมอง (การควบคุมภาพ) มันถูกใช้เพื่อตั้งค่าขนาดมุมมองหรือเลย์เอาต์ตามเนื้อหาหรือขนาดของเลย์เอาต์หลักแทนที่จะระบุขนาดอย่างชัดเจน

fill_parent(คัดค้านและเปลี่ยนชื่อMATCH_PARENTในระดับ API 8 ขึ้นไป)

การตั้งค่ารูปแบบของเครื่องมือที่จะ fill_parent ที่จะบังคับให้มันขยายจะใช้เป็นพื้นที่มากที่สุดเท่าที่เป็นองค์ประกอบที่มีอยู่ในรูปแบบที่มันถูกวางไว้ใน. ก็ประมาณเทียบเท่าของการตั้งค่า dockstyle ของการควบคุมแบบฟอร์ม Windows Fillไป

การตั้งค่าเลย์เอาต์ระดับบนสุดหรือตัวควบคุมเป็น Fill_parent จะบังคับให้ใช้ทั้งหน้าจอ

wrap_content

การตั้งค่าขนาดของมุมมองเป็น wrap_content จะบังคับให้ขยายได้มากพอที่จะมีค่า (หรือตัวควบคุมลูก) ที่มีอยู่ สำหรับการควบคุมเช่นกล่องข้อความ (TextView) หรือรูปภาพ (ImageView) - สิ่งนี้จะหุ้มข้อความหรือรูปภาพที่กำลังแสดง สำหรับองค์ประกอบเลย์เอาต์มันจะปรับขนาดเลย์เอาต์ให้พอดีกับส่วนควบคุม / เลย์เอาต์ที่เพิ่มเข้ามาเป็นรายการย่อย

มันเทียบเท่ากับการตั้งค่าAutosizeคุณสมบัติของตัวควบคุมฟอร์มของ Windows เป็นTrue

เอกสารออนไลน์

มีรายละเอียดบางอย่างในเอกสารรหัสของ Android ที่นี่


12
จะเกิดอะไรขึ้นถ้าความกว้างของภาพใหญ่กว่าความกว้างของหน้าจอและฉันตั้งค่าความกว้างของภาพเป็น fill_parent รูปภาพจะถูกบีบอัดให้มีขนาดเท่าหน้าจอหรือไม่
John Watson

@JohnWatson คุณหาคำตอบของคุณ? ฉันก็อยากรู้เช่นกัน
Rachael

เป็นการดีที่จะทราบคุณสมบัติที่เทียบเท่าของตัวควบคุมฟอร์มของ Windows ที่กล่าวถึง
Rempelos

@JohnWatson เห็นอะไรบ้าง เรื่องราวของคุณคืออะไร คำตอบคืออะไร ?
หวังว่าจะช่วยให้

36

fill_parent(เลิกใช้แล้ว) =match_parent
เส้นขอบของมุมมองชายด์ขยายเพื่อให้ตรงกับขอบของมุมมองพาเรนต์

wrap_content
เส้นขอบของมุมมองเด็กล้อมรอบเนื้อหาของมันอย่างอบอุ่น

นี่คือภาพบางส่วนที่จะทำให้สิ่งต่าง ๆ ชัดเจนยิ่งขึ้น TextViewsสีเขียวและสีแดง สีขาวเป็นการLinearLayoutแสดงผ่าน

ป้อนคำอธิบายรูปภาพที่นี่

ทุกคนView(a TextView, a , ImageViewa Button, ฯลฯ ) จำเป็นต้องตั้งค่าwidthและheightมุมมอง ในไฟล์โครงร่าง xml ที่อาจมีลักษณะเช่นนี้:

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

นอกเหนือจากการตั้งค่าความกว้างและความสูงเป็นmatch_parentหรือwrap_contentคุณยังสามารถตั้งค่าเป็นค่าสัมบูรณ์:

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

โดยทั่วไปแล้วมันไม่ดีเท่าไหร่เพราะมันไม่ยืดหยุ่นสำหรับอุปกรณ์ขนาดต่าง ๆ หลังจากที่คุณมีความเข้าใจwrap_contentและสิ่งต่อไปที่จะได้เรียนรู้คือmatch_parentlayout_weight

ดูสิ่งนี้ด้วย

XML สำหรับภาพด้านบน

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>

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>

บันทึก

คำอธิบายในคำตอบนี้ถือว่าไม่มีระยะขอบหรือแพ็ดดิ้ง แต่แม้ว่าจะมีแนวคิดพื้นฐานก็ยังคงเหมือนเดิม เส้นขอบ / ระยะห่างของมุมมองถูกปรับด้วยค่าของระยะขอบหรือช่องว่างภายใน


9
  • fill_parent จะทำให้ความกว้างหรือความสูงขององค์ประกอบมีขนาดใหญ่เท่ากับองค์ประกอบหลักหรืออีกนัยหนึ่งคือคอนเทนเนอร์

  • wrap_content จะทำให้ความกว้างหรือความสูงมีขนาดใหญ่เท่าที่จำเป็นเพื่อให้มีองค์ประกอบอยู่ภายใน

คลิกที่นี่สำหรับการอ้างอิง ANDROID DOC


ภาชนะจะเป็นอะไร? วิธีล้อมรอบมุมมองด้วยคอนเทนเนอร์อื่น
Tejzeratul

2

fill_parent :

ส่วนประกอบถูกจัดเรียงเค้าโครงสำหรับการที่fill_parentจะถูกบังคับให้ขยายเพื่อเติมสมาชิกหน่วยโครงร่างให้มากที่สุดเท่าที่เป็นไปได้ในพื้นที่ สิ่งนี้สอดคล้องกับคุณสมบัติ dockstyle ของตัวควบคุม Windows เลย์เอาต์หรือชุดควบคุมด้านบนfill_parentจะบังคับให้ใช้ทั้งหน้าจอ

wrap_content

ตั้งค่ามุมมองขนาดwrap_contentจะถูกบังคับให้ดูขยายเพื่อแสดงเนื้อหาทั้งหมด TextView และ ImageViewควบคุมตัวอย่างเช่นมีการตั้งค่าwrap_contentจะแสดงข้อความภายในทั้งหมดและภาพ องค์ประกอบเค้าโครงจะเปลี่ยนขนาดตามเนื้อหา ตั้งค่ามุมมองขนาดของแอตทริบิวต์ Autosize โดยwrap_contentประมาณเทียบเท่ากับการตั้งค่าการควบคุม Windows สำหรับ True

สำหรับรายละเอียดโปรดตรวจสอบลิงค์นี้: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.