XMLファイルからビューを膨らませるとはどういう意味ですか?


278

私はAndroid開発に不慣れで、レイアウトxmlファイルからInflatingビューへの参照に遭遇し続けます。私はグーグルで開発ガイドを検索しましたが、それが何を意味するのか理解できませんでした。誰かが非常に単純な例を提供できれば、それは大いに感謝されます。

回答:


257

XMLレイアウトを作成すると、Android OSによってインフレートされます。つまり、基本的には、メモリ内にビューオブジェクトを作成してレンダリングされます。その暗黙のインフレと呼びましょう(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
inflate = renderingの場合、onDraw()の用途は何ですか?
PypeBros 2012

@ sylvainulg、R.id.viewはxml要素の属性を変更するために使用され、インフレートも同じことができます。膨張は、カスタムビューで特に役立ちます。xmlファイル全体を膨らませるには、おなじみのActivityクラスのsetContentViewを使用します。ビューは、LayoutInflater object.inflate()を使用して手動で各ビューを膨らませる必要があります。アクティビティにはライフサイクルがあります。代わりに、ビューには描画サイクルがあります。inflaterは、XMLファイルで優先レイアウトを使用する代わりに、カスタムビューで特に役立ちます。
Sree Rama

@Cristianお願い、ここでgoo.gl/E37NSuへの
eddy

24
インフレートはレンダリングではなく、XMLファイルの内容に基づいてメモリ内にViewオブジェクトを実際に作成することです。膨張後、ビューはメモリ内に表示されるとは限りません。
2015

1
@MattJ。さて、私の答えは不十分に語られているかもしれません。Androidは、XMLをどこかに置くだけでなく、setContentViewを呼び出すか、手動でレイアウトを膨らませると、ビューを膨らませます。findViewByIdビューオブジェクトを呼び出す時点ですでにメモリ内にあり、そのための唯一の理由は、その特定のオブジェクトへの参照を取得することです(オブジェクトを変更するか、データを取得するためです)。
クリスティアン2017年

159

ビューを「膨らませる」とは、レイアウトXMLを取得して構文解析し、要素とその中で指定されている属性からビューオブジェクトとビューグループオブジェクトを作成し、それらのビューとビューグループの階層を親ビューグループに追加することを意味します。setContentView()を呼び出すと、XMLの読み取りから作成されたビューがアクティビティにアタッチされます。LayoutInflaterを使用してビューを別のViewGroupに追加することもできます。これは、多くの状況で役立つツールです。


22
私にはもっと正確な説明のように思えます。
PypeBros 2012

4
私自身、「インフレ」という用語にまだ少し戸惑っています。(空気が何かに入るのを止めることしかできなかった場合)。しかし、これが役立つかもしれません。私はUbuntuターミナルでunzipプログラムを実行したところ、「inflating:X / Y / z.xml」という用語に気づきました。全く同じコンセプトだと思います。
Ben Ogorek 14年

6
この場合の「拡張」とは、フレームワークがXMLからレイアウトの説明を取得し、ビュー階層に実際のビューオブジェクトを入力することを意味します。だから、レイアウトを埋めるという意味で膨らんでいます。
jjb 2014年

1
@FranciscoCorrales-はい。この種のものを使用する最も一般的なことは、行を設定するListAdapterのようなものです。私はそれを使用して、LinearLayoutsのようなものを入力し、ListAdapterアプローチを示唆しない方法でいくつかのデータオブジェクトを反復しました。
jjb 2014年

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
inflateのパラメータattachToRootはどういう意味ですか?
flz 2018

詳細回答を参照してくださいstackoverflow.com/questions/12567578/...
ツァラE Ahmer

5

ここで「ビューのインフレート」とは、そのxmlファイルで指定されたビューを描画するlayout.xmlファイルをフェッチし、作成されたビューで親のviewGroupをPOPULATING(= inflating)することを意味すると思います。


4

インフレの平易な定義は、XMLコードをJavaコードに変換することかもしれません。たとえば、XMLにタグがある場合、OSは対応するJavaオブジェクトをメモリに作成する必要があるため、インフレータはXMLタグを読み取り、Javaに対応するオブジェクトを作成します。


2

UIはXMLに変換しますが、ビューオブジェクトは表示するオブジェクトであるため、XMLをビューオブジェクトに変換する必要があります。インフレートとは、XMLをビューオブジェクトに変換して表示できるようにするためです。これには、レイアウトインフレータサービスと呼ばれるサービスが必要です。 xmlを指定すると、変換されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.