การขยายมุมมองจากไฟล์ xml หมายถึงอะไร


278

ฉันยังใหม่กับการพัฒนาแอนดรอยด์และการอ้างอิงถึงการขยายมุมมองจากไฟล์ xml ของเลย์เอาต์ ฉัน googled และค้นหาคู่มือการพัฒนา แต่ก็ยังไม่สามารถเข้าใจความหมายของมัน หากใครบางคนสามารถให้ตัวอย่างที่ง่ายมากมันก็จะได้รับการชื่นชมมาก

คำตอบ:


257

เมื่อคุณเขียนเค้าโครง XML มันจะถูกขยายโดย Android OS ซึ่งโดยทั่วไปหมายความว่ามันจะถูกแสดงผลโดยการสร้างวัตถุมุมมองในหน่วยความจำ เรียกว่าเงินเฟ้อโดยปริยาย (ระบบปฏิบัติการจะขยายมุมมองให้คุณ) ตัวอย่างเช่น

class Name extends Activity{
    public void onCreate(){
         // the OS will inflate the your_layout.xml
         // file and use it for this activity
         setContentView(R.layout.your_layout);
    }
}

LayoutInflaterนอกจากนี้คุณยังสามารถขยายมุมมองที่ชัดเจนโดยใช้ ในกรณีนี้คุณต้อง:

  1. รับตัวอย่างของ LayoutInflater
  2. ระบุ XML เพื่อขยาย
  3. ใช้ผลตอบแทน View
  4. ตั้งค่ามุมมองเนื้อหาด้วยมุมมองที่ส่งคืน (ด้านบน)

ตัวอย่างเช่น

LayoutInflater inflater = LayoutInflater.from(YourActivity.this); // 1
View theInflatedView = inflater.inflate(R.layout.your_layout, null); // 2 and 3
setContentView(theInflatedView) // 4

24
ถ้าพอง = การแสดงผลแล้วการใช้ onDraw () คืออะไรอย่างแม่นยำ?
PypeBros

@sylvainulg, R.id.view ใช้เพื่อเปลี่ยนคุณสมบัติขององค์ประกอบ xml และพองสามารถทำเช่นเดียวกัน การขยายตัวนั้นมีประโยชน์อย่างยิ่งในมุมมองที่กำหนดเอง หากต้องการขยายไฟล์ xml ทั้งหมดให้ใช้ setContentView ของคลาสกิจกรรมที่คุ้นเคย มุมมองต้องขยายแต่ละมุมมองด้วยตนเองโดยใช้ LayoutInflater object.inflate () กิจกรรมมีวงจรชีวิต มุมมองมีวงจรการวาดภาพแทน inflater มีประโยชน์อย่างมากกับมุมมองที่กำหนดเองแทนที่จะใช้โครงร่าง predifiend ในไฟล์ XML
Sree Rama

@Cristian โปรดคุณคิดว่าคุณสามารถให้คำแนะนำ / ความคิดกับฉันได้ที่นี่goo.gl/E37NSu
eddy

24
ฉันไม่คิดว่าการขยายตัวจะทำให้พองได้ แต่เป็นการสร้างวัตถุ View ในหน่วยความจำตามเนื้อหาของไฟล์ xml หลังจากขยายมุมมองจะอยู่ในหน่วยความจำไม่จำเป็นต้องมองเห็นได้
อาเหม็ด

1
@MattJ คำตอบของฉันอาจเป็นประโยคที่ไม่ดี Android จะขยายมุมมองไม่เพียงแค่มี XML อยู่ที่ใดที่หนึ่ง แต่เมื่อคุณเรียกใช้ setContentView หรือขยายเค้าโครงด้วยตนเอง ตามเวลาที่คุณเรียกfindViewByIdใช้วัตถุมุมมองที่มีอยู่แล้วในหน่วยความจำและเหตุผลเดียวที่คุณทำคือการได้รับการอ้างอิงไปยังวัตถุเฉพาะนั้น (ไม่ว่าจะเปลี่ยนหรือรับข้อมูลออกจากมัน)
Cristian

160

"Inflating" มุมมองหมายถึงการนำโครงร่าง XML และแยกวิเคราะห์เพื่อสร้างมุมมองและวัตถุกลุ่มมุมมองจากองค์ประกอบและแอตทริบิวต์ที่ระบุภายในแล้วเพิ่มลำดับชั้นของมุมมองและกลุ่มมุมมองเหล่านั้นไปยังมุมมองหลัก เมื่อคุณเรียกใช้ setContentView () จะแนบมุมมองที่สร้างจากการอ่าน XML เข้ากับกิจกรรม คุณยังสามารถใช้ LayoutInflater เพื่อเพิ่มมุมมองไปยัง ViewGroup อื่นซึ่งอาจเป็นเครื่องมือที่มีประโยชน์ในหลาย ๆ สถานการณ์


22
ฟังดูเหมือนเป็นคำอธิบายที่ถูกต้องมากกว่าสำหรับฉัน
PypeBros

4
ฉันยังคงสับสนเล็กน้อยโดยคำศัพท์ "เงินเฟ้อ" ตัวเอง (ถ้าฉันทำได้แค่หยุดนึกภาพอากาศกำลังเข้าสู่บางสิ่ง) แต่นี่อาจช่วยได้: ฉันเพิ่งรันโปรแกรม unzip ที่เทอร์มินัล Ubuntu และสังเกตคำศัพท์: "พองตัว: X / Y / z.xml" ฉันคิดว่ามันเป็นแนวคิดเดียวกันจริงๆ
Ben Ogorek

6
"พอง" ในกรณีนี้หมายความว่ากรอบกำลังใช้คำอธิบายเค้าโครงจาก XML และการเติมลำดับชั้นการดูด้วยวัตถุมุมมองที่เกิดขึ้นจริง ดังนั้นมันทำให้รู้สึกถึงการเติมเลย์เอาต์
jjb

1
@FranciscoCorrales - แน่นอน สิ่งที่พบบ่อยที่สุดที่คุณจะใช้สิ่งนี้เป็นสิ่งที่ต้องการListAdapterที่คุณต้องการที่จะเติมแถว ฉันใช้มันเพื่อเติมข้อมูลต่างๆเช่น LinearLayouts วนรอบวัตถุข้อมูลในวิธีที่ไม่แนะนำวิธีการ ListAdapter
jjb

36

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

Button but = new Button();
but.setText ="button text";
but.background ...
but.leftDrawable.. and so on...

TextView txt = new TextView();
txt.setText ="button text";
txt.background ... and so on...

จากนั้นเราต้องสร้างเลย์เอาต์ที่เราสามารถเพิ่มมุมมองด้านบน:

RelativeLayout rel = new RelativeLayout();

rel.addView(but);

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

Android ทำให้ง่ายสำหรับเราในการสร้าง. xml อย่างง่ายและออกแบบสไตล์และคุณสมบัติใน xml จากนั้นก็ขยายได้ทุกที่ที่เราต้องการโดยไม่ต้องเจ็บปวดจากการตั้งข้อ จำกัด ทางโปรแกรม

LayoutInflater inflater = 
              (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View menuLayout = inflater.inflate(R.layout.your_menu_layout, mainLayout, true);
//now add menuLayout to wherever you want to add like

(RelativeLayout)findViewById(R.id.relative).addView(menuLayout);

ฉันชอบที่คุณอธิบายว่าเงินเฟ้อคืออะไรโดยแสดงให้เห็นว่าคุณจะทำอย่างไร
Daniel

1
พารามิเตอร์ของ inflate attachToRoot หมายถึงอะไร
flz

ดูรายละเอียดคำตอบstackoverflow.com/questions/12567578/…
Zar E Ahmer

5

ฉันคิดว่าที่นี่ "ขยายมุมมอง" หมายถึงการดึงไฟล์ layout.xml วาดมุมมองที่ระบุในไฟล์ xml นั้นและ POPULATING (= พองตัว) พาเรนต์วิวกรุ๊ปที่มีมุมมองที่สร้างขึ้น


4

นิยามคนธรรมดาสำหรับเงินเฟ้ออาจจะแปลงรหัส XML เป็นรหัส Java เพียงวิธีที่จะเข้าใจเช่นหากเรามีแท็กใน XML ระบบปฏิบัติการจะต้องสร้างวัตถุ Java ที่สอดคล้องกันในหน่วยความจำดังนั้นผู้อ่านที่อ่าน XMLtags และสร้างวัตถุที่สอดคล้องกันใน Java


2

เนื่องจากเราสร้าง UI เป็น XML แต่มุมมองวัตถุเป็นสิ่งที่เราแสดงดังนั้นเราจำเป็นต้องแปลง xml เป็นวัตถุมุมมองดังนั้นการขยายตัวหมายความว่าเราแปลง xml เป็นวัตถุมุมมองเพื่อให้สามารถแสดงผลได้เราต้องการบริการที่เรียกว่า และให้ xml กับมันและมันจะถูกแปลงให้คุณ

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