LayoutInflater example
안드로이드에서 LayoutInflater를 이용하여 2개의 Layout 파일로 화면을 구성하는 예
main.xml 파일에 있는 LinearLayout 에 하위 레이아웃 (fruits.xml)을 포함하는 내용
전체화면에 출력될 레이아웃 파일을 설정할 때는 setContentView()를 사용하지만 화면의 일부분을 차지할 부분 레이아웃 파일을 View객체로 로드하는 기능은 LayoutInflater가 담당한다.
res/layout/main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rootLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="아래의 과일을 하나만 선택해주세요" /> </LinearLayout>
res/layout/fruits.xml ( main.xml안에 있는 LinearLayout 에 포함될 하위 레이아웃 파일 )
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onBtnCheck" android:text="확 인" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginLeft="50dip" android:text=" " /> </LinearLayout> <RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <RadioButton android:id="@+id/radio0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="사 과" /> <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="멜 론" /> <RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="오 이" /> <RadioButton android:id="@+id/radio3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="망 고" /> <RadioButton android:id="@+id/radio4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="바나나" /> </RadioGroup> </LinearLayout>
MainActivity.java
package com.example.androidapp; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.TextView; public class MainActivity extends Activity implements OnCheckedChangeListener { RadioGroup rg; TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LinearLayout rootLayout = (LinearLayout) findViewById(R.id.rootLayout); /* LayoutInflater를 이용하여 main.xml 안에 fruits.xml파일의 내용을 추가 */ LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.fruits, rootLayout, true); rg = (RadioGroup) findViewById(R.id.radioGroup1); rg.setOnCheckedChangeListener(this); tv = (TextView) findViewById(R.id.textView1); } public void onBtnCheck(View v) { int checkedId = rg.getCheckedRadioButtonId(); RadioButton rb = (RadioButton) findViewById(checkedId); String fruitName = rb.getText().toString(); String text = String.format("[%s]를 선택하셨습니다", fruitName); tv.setText(text); } public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton rb = (RadioButton) findViewById(checkedId); String fruitName = rb.getText().toString(); String text = String.format("[%s]를 선택하셨습니다", fruitName); tv.setText(text); } }