私はAndroid開発に不慣れで、レイアウトxmlファイルからInflatingビューへの参照に遭遇し続けます。私はグーグルで開発ガイドを検索しましたが、それが何を意味するのか理解できませんでした。誰かが非常に単純な例を提供できれば、それは大いに感謝されます。
私はAndroid開発に不慣れで、レイアウトxmlファイルからInflatingビューへの参照に遭遇し続けます。私はグーグルで開発ガイドを検索しましたが、それが何を意味するのか理解できませんでした。誰かが非常に単純な例を提供できれば、それは大いに感謝されます。
回答:
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
。その場合、次のことを行う必要があります。
LayoutInflater
View
例えば:
LayoutInflater inflater = LayoutInflater.from(YourActivity.this); // 1
View theInflatedView = inflater.inflate(R.layout.your_layout, null); // 2 and 3
setContentView(theInflatedView) // 4
findViewById
ビューオブジェクトを呼び出す時点ですでにメモリ内にあり、そのための唯一の理由は、その特定のオブジェクトへの参照を取得することです(オブジェクトを変更するか、データを取得するためです)。
ビューを「膨らませる」とは、レイアウトXMLを取得して構文解析し、要素とその中で指定されている属性からビューオブジェクトとビューグループオブジェクトを作成し、それらのビューとビューグループの階層を親ビューグループに追加することを意味します。setContentView()を呼び出すと、XMLの読み取りから作成されたビューがアクティビティにアタッチされます。LayoutInflaterを使用してビューを別のViewGroupに追加することもできます。これは、多くの状況で役立つツールです。
インフレートは、実行時のアクティビティにビュー(.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);
ここで「ビューのインフレート」とは、そのxmlファイルで指定されたビューを描画するlayout.xmlファイルをフェッチし、作成されたビューで親のviewGroupをPOPULATING(= inflating)することを意味すると思います。
インフレの平易な定義は、XMLコードをJavaコードに変換することかもしれません。たとえば、XMLにタグがある場合、OSは対応するJavaオブジェクトをメモリに作成する必要があるため、インフレータはXMLタグを読み取り、Javaに対応するオブジェクトを作成します。