Що означає надути подання з файлу xml?


278

Я новачок в розробці андроїда і постійно наштовхуюсь на посилання на надувні погляди з файлу XML-макета. Я гуглив і шукав керівництво по розробці, але все ще не зміг зрозуміти, що це означає. Якби хтось міг навести дуже простий приклад, це було б дуже вдячно.

Відповіді:


257

Коли ви пишете макет XML, він буде надутий ОС Android, що в основному означає, що він буде наданий шляхом створення об’єкта перегляду в пам'яті. Назвемо цю неявну інфляцію (ОС буде роздувати погляд для вас). Наприклад:

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 of Activity. Перегляд має надувати кожен вид вручну за допомогою LayoutInflater object.inflate (). Діяльність має життєвий цикл. Перегляд замість цього має цикл малювання. inflater є особливо корисним для користувацького перегляду замість використання макета predifiend у файлі XML.
Sree Rama

@Cristian ласка, ви думаєте , ви могли б дати мені деякі поради / ідеї тут goo.gl/E37NSu
вихрові

24
Я не думаю, що завищення є рендерінгом, а надуванням є фактичне створення об’єкта View у пам'яті на основі вмісту файлу xml. Після надуття Вид буде в пам'яті не обов'язково видно.
Ахмед

1
@MattJ. Що ж, моя відповідь може бути неякісно сформульована. Android надуває подання не лише тим, що десь є XML, але коли ви телефонуєте setContentView або вручну надуваєте макет. На час виклику findViewByIdоб'єктів перегляду вже є в пам'яті, і єдиною причиною цього є отримання посилання на конкретний об'єкт (або змінити його, або отримати дані з нього).
Крістіан

160

"Надуття" подання означає прийняття макета XML та його аналіз для створення об'єктів подання та групи перегляду з елементів та їх атрибутів, зазначених усередині, а потім додавання ієрархії цих поглядів та груп перегляду до батьківського ViewGroup. Коли ви викликаєте setContentView (), він додає погляди, які він створює, читаючи XML, до активності. Ви також можете використовувати LayoutInflater, щоб додати представлення до іншого ViewGroup, який може бути корисним інструментом у багатьох обставинах.


22
це звучить як набагато точніший опис для мене.
PypeBros

4
Мене все ще трохи бентежить термін "інфляція". (Якби я міг лише перестати зображати, як повітря щось впадає). Але, можливо, це допоможе: я просто запустив програму unzip на терміналі Ubuntu і помітив термінологію: "inflation: X / Y / z.xml." Я гадаю, це дійсно та сама концепція.
Бен Огорек

6
"Надуття" в цьому випадку означає, що рамки беруть опис макета з XML і заповнюють ієрархію подання фактичними об'єктами View. Отже, це надувається в сенсі заповнення макета.
jjb

1
@FranciscoCorrales - Звичайно. Найпоширеніша річ, для якої ви використовуєте подібний предмет, - це щось на зразок ListAdapter , де ви хочете заповнити рядок. Я використовував його для заселення таких речей, як LinearLayouts, ітерації над деяким об’єктом даних таким чином, що не пропонував підхід ListAdapter.
jjb

36

Надування - це процес додавання подання (.xml) до активності під час виконання. Коли ми створюємо listView, ми динамічно надуваємо кожен його елемент. Якщо ми хочемо створити ViewGroup з кількома переглядами, такими як кнопки та перегляд тексту, ми можемо створити його так:

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

Мені подобається, як ви описали, що таке інфляція насправді, показавши, як ви це зробите вручну.
Даніель

1
Що означає параметр надуття attachToRoot?
flz

Дивіться деталі відповіді stackoverflow.com/questions/12567578 / ...
Зар E Ahmer

5

Я думаю, що тут "надуваюча представлення" означає отримання файлу layout.xml, який малює подання, вказане у цьому xml-файлі, і ПОПУЛЯЦІЙНИЙ (= надуваючи) батьківський viewGroup зі створеним представленням.


4

Визначенням для неспеціаліста для інфляції може бути перетворення XML-коду в код Java. Просто спосіб зрозуміти, наприклад, якщо у нас є тег у XML, ОС повинна створити відповідний об’єкт Java в пам'яті, тому інфлятор зчитує XML-теги та створює відповідні об'єкти в Java.


2

Оскільки ми перетворюємо інтерфейс у XML, але перегляд об’єктів - це те, що ми відображаємо, тому нам потрібно якось перетворити xml у об’єкти подання, тому надуваючи означає, що ми перетворюємо xml у об’єкти подання, щоб вони могли відображатися, для цього нам потрібна послуга, яка називається сервіс розгортання макета і дайте йому xml, і він буде конвертований для вас.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.