Việc tăng lượt xem từ tệp xml có nghĩa là gì?


278

Tôi chưa quen với việc phát triển Android và tiếp tục bắt gặp các tài liệu tham khảo về các khung nhìn Inflating từ tệp xml bố cục. Tôi googled và tìm kiếm hướng dẫn phát triển nhưng vẫn không thể hiểu được ý nghĩa của nó. Nếu ai đó có thể cung cấp một ví dụ rất đơn giản, nó sẽ được đánh giá cao.

Câu trả lời:


257

Khi bạn viết một bố cục XML, nó sẽ được hệ điều hành Android thổi phồng lên , về cơ bản có nghĩa là nó sẽ được hiển thị bằng cách tạo đối tượng xem trong bộ nhớ. Hãy gọi đó là lạm phát ngầm (HĐH sẽ tăng cường quan điểm cho bạn). Ví dụ:

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);
    }
}

Bạn cũng có thể tăng số lượt xem một cách rõ ràng bằng cách sử dụng LayoutInflater. Trong trường hợp đó, bạn phải:

  1. Lấy một ví dụ về LayoutInflater
  2. Chỉ định XML để tăng cao
  3. Sử dụng trả lại View
  4. Đặt chế độ xem nội dung với chế độ xem được trả lại (ở trên)

Ví dụ:

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

24
nếu Inflate = render, chính xác thì việc sử dụng onDraw () là gì?
PypeBros

@sylvainulg, R.id.view được sử dụng để thay đổi các thuộc tính của phần tử xml và lạm phát có thể làm tương tự. thổi phồng là đặc biệt hữu ích trong quan điểm tùy chỉnh. Để thổi phồng toàn bộ tệp xml, lớp setContentView of Activity quen thuộc được sử dụng. Một Chế độ xem phải thổi phồng mỗi Chế độ xem theo cách thủ công bằng cách sử dụng đối tượng LayoutInflater.inflate (). Một hoạt động có vòng đời. Một View có chu kỳ bốc thăm thay thế. Inflater rất hữu dụng với chế độ xem tùy chỉnh thay vì sử dụng bố cục của người tiền nhiệm trong tệp XML.
Sree Rama

@Cristian Xin vui lòng, bạn có nghĩ rằng bạn có thể cho tôi một số lời khuyên / ý tưởng ở đây goo.gl/E37NSu
eddy

24
Tôi không nghĩ lạm phát là hiển thị thay vì thổi phồng là thực tế tạo đối tượng View trong bộ nhớ dựa trên nội dung tệp xml. Sau khi tăng, Chế độ xem sẽ nằm trong bộ nhớ không nhất thiết phải hiển thị.
Ahmed

1
@MattJ. Vâng, câu trả lời của tôi có thể được diễn đạt kém. Android sẽ tăng cường tầm nhìn không chỉ bằng cách có XML ở đâu đó, mà khi bạn gọi setContentView hoặc làm tăng bố cục theo cách thủ công. Vào thời điểm bạn gọi findViewByIdcác đối tượng xem đã có trong bộ nhớ và lý do duy nhất bạn làm như vậy là để có được một tham chiếu đến đối tượng cụ thể đó (để thay đổi nó hoặc lấy dữ liệu ra khỏi nó).
Cristian

159

"Inflating" một khung nhìn có nghĩa là lấy XML bố cục và phân tích cú pháp nó để tạo các đối tượng khung nhìn và khung nhìn từ các thành phần và thuộc tính của chúng được chỉ định bên trong, sau đó thêm cấu trúc phân cấp của các khung nhìn và các khung nhìn đó vào Viewgroup cha. Khi bạn gọi setContentView (), nó sẽ đính kèm các khung nhìn mà nó tạo ra từ việc đọc XML vào hoạt động. Bạn cũng có thể sử dụng LayoutInflater để thêm chế độ xem vào một Viewgroup khác, đây có thể là một công cụ hữu ích trong nhiều trường hợp.


22
Nghe có vẻ như là một mô tả chính xác hơn nhiều đối với tôi.
PypeBros

4
Bản thân tôi vẫn còn một chút bối rối bởi thuật ngữ "lạm phát". (Nếu tôi chỉ có thể ngừng hình dung không khí đi vào một cái gì đó). Nhưng có lẽ điều này sẽ giúp ích: Tôi vừa chạy chương trình giải nén tại một thiết bị đầu cuối Ubuntu và nhận thấy thuật ngữ: "thổi phồng: X / Y / z.xml." Tôi cho rằng đó thực sự là cùng một khái niệm.
Ben Ogorek

6
"Inflating" trong trường hợp này có nghĩa là khung công tác đang lấy mô tả bố cục từ XML và điền vào hệ thống phân cấp khung nhìn với các đối tượng View thực tế. Vì vậy, nó tăng cao trong ý nghĩa điền vào bố cục.
jjb

1
@FranciscoCorrales - Chắc chắn rồi. Điều phổ biến nhất bạn sử dụng loại điều này là cho một thứ như ListAd CHƯƠNG , nơi bạn muốn đưa vào một hàng. Tôi đã sử dụng nó để điền vào những thứ như linearLayouts, lặp lại một số đối tượng dữ liệu theo cách không đề xuất cách tiếp cận ListAd CHƯƠNG.
jjb

36

Inflating là quá trình thêm chế độ xem (.xml) vào hoạt động trong thời gian chạy. Khi chúng ta tạo một listView, chúng ta sẽ tự động thổi phồng từng mục của nó. Nếu chúng tôi muốn tạo một Viewgroup có nhiều chế độ xem như nút và textview, chúng tôi có thể tạo nó như vậy:

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...

Sau đó, chúng ta phải tạo một bố cục nơi chúng ta có thể thêm các khung nhìn ở trên:

RelativeLayout rel = new RelativeLayout();

rel.addView(but);

Và bây giờ nếu chúng ta muốn thêm một nút ở góc phải và một khung nhìn ở phía dưới, chúng ta phải thực hiện rất nhiều công việc. Đầu tiên bằng cách khởi tạo các thuộc tính khung nhìn và sau đó áp dụng nhiều ràng buộc. Điều này là tốn thời gian.

Android giúp chúng ta dễ dàng tạo một .xml đơn giản và thiết kế kiểu và thuộc tính của nó trong xml và sau đó chỉ cần thổi phồng nó bất cứ nơi nào chúng ta cần mà không phải chịu sự ràng buộc của lập trình.

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);

Tôi thích cách bạn mô tả lạm phát thực sự là gì, bằng cách hiển thị cách bạn sẽ thực hiện thủ công.
Daniel

1
Tham số của Inflate Đính kèm có nghĩa là gì?
flz

Xem chi tiết câu trả lời stackoverflow.com/questions/12567578/
Mạnh

5

Tôi nghĩ ở đây "thổi phồng một khung nhìn" có nghĩa là tìm nạp tệp layout.xml vẽ một khung nhìn được chỉ định trong tệp xml đó và POPULATING (= thổi phồng) viewgroup cha mẹ với Chế độ xem được tạo.


4

Một định nghĩa layman cho lạm phát có thể là chuyển đổi mã XML thành mã Java. Chỉ là một cách để hiểu, ví dụ, nếu chúng ta có một thẻ trong XML, HĐH phải tạo một đối tượng Java tương ứng trong bộ nhớ, do đó, người đọc sẽ đọc các XMLtags và tạo các đối tượng tương ứng trong Java.


2

Bởi vì chúng tôi tạo UI thành XML nhưng xem các đối tượng là những gì chúng tôi hiển thị nên bằng cách nào đó chúng tôi cần chuyển xml thành các đối tượng xem để tăng nghĩa là chúng tôi đang chuyển xml thành các đối tượng xem để có thể hiển thị, vì vậy chúng tôi cần một dịch vụ gọi là dịch vụ trình bày bố cục và cung cấp cho nó một xml và nó sẽ được chuyển đổi cho bạn.

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.