SetContentView()메서드는 xml문서의 리소스 ID를 전달받아 리소스대로 객체를 생성하여 액티비티의 내부를 채운다.
메서드에서 수행하는 동작을 직접 수행하기위해 Inflater를 이용한다.

다음처럼 xml파일과 java파일이 정의 되있다.
main.xml

더보기


main.java

더보기


위를 실행하면 다음과 같은 화면이 생성된다


위의 방법은 SetContentView() 메소드를 이용하여 액티비티를 채운 방법이다.
SetContentView() 메소드는 세가지 방식으로 오버로딩 되있으며, Inflate 방식을 이용하여도 동일한 결과를 호출할수 있으며 .java파일의 내용만이 달라진다.

 
public class Inflate extends Activity{
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
LayoutInflater inflate=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout line=(LinearLayout)inflate.inflate(R.layout.main,null);
setContentView(line);
}
}
main.java의 내용이 아주 약간 변했지만 결과물은 동일한 결과가 도출된다.

View inflate(int resource, ViewGroup root)
이 메소드는 컴파일된 리소스(xml파일) 을 첫번째 인자로 받고 두번째 인자로 생선된 뷰의 루트로 사용할 뷰를 지정하거나 리소스에 루트가 명시되있을겨우(xml파일의 LinearLayout) null로 지정한다.

아래의 코드는 모두 동일하게 inflate하는 방법이며 방식만 약간 달라질뿐 결국 같은 코드라고 볼수 있다.

LayoutInflater inflate=LayoutInflater.form(this);
LinearLayout line=(LinearLayout)inflate.inflate(R.layout.main,null);
setContentView(line);

//또다른 방법
LineLayout line=(LinearLayout)View.inflate(this,R.layout.main,null);
setContentView(line);

모두 똑같이 래퍼를 이용하는 방법이며 아주 사소한 차이가 있을뿐이다. Inflate를 씀으로써 얻을수 있는 잇점은 특정 뷰나 뷰그룹만을 하나의 xml파일로 정의해놓고 자주이용하는 곳에서 이용이 가능하다. 매번 xml에 뷰(or 뷰그룹)을 정의하는 것 보다 하나 정의해논 xml파일을 자바 소스코드내에서 inflate하여 결합이 가능하기 때문에 런타임시에 변화를 주거나 다양한 모습으로 변경이 가능하다.

text.xml
<TextView xmlns:android=....
....
>
</TextView>
//위와 같은 TextView 만 정의한 xml파일을 생성하고
//소스코드 에서 inflate하여 뷰를 결합한다.
LinearLayout line=new LinearLayout();
TextView text=(TextView)View.inflate(this,R.layout.text,null);
line.addView(text);
setContentView(line);
신고

'Android > Tip' 카테고리의 다른 글

구글맵키 맥에서 받아오기  (2) 2011.05.13
Eclipse 간단한 단축키  (0) 2010.10.26
Event Handling  (0) 2010.06.25
ToastDialog 이용  (0) 2010.06.24
Canvas와 Paint객체  (0) 2010.06.23
Layout Inflater 하기  (0) 2010.06.21

+ Recent posts