1. LayoutInflater ?
안드로이드에서 어떤 뷰가 화면에 보일려면 반드시 객체화(인스턴스) 되어 있어야 하는데요.
안드로이드에서 뷰 객체를 생성하는 과정은 크게 2가지가 있습니다.
직접 코드상에서 아래와 같이 생성하는 방법이 있고
Button b = new Button(this) // this 는 Context 를 의미
그리고 xml 파일을 통해서 객체를 생성하는 방법이 있습니다.
인플레이트라는 것은 xml 파일을 통해서 객체화를 시키는 것을 말합니다.
2. LayoutInflater 사용시 주의 사항
LayoutInflater inflate 사용할때 parameter의 의미에 주의해서 처리해야합니다.
String service = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater li = (LayoutInflater)getContext().getSystemService (service);
LinearLayout ll =(LinearLayout)li.inflate (R.layout.region_main_header, this, false);
addView(ll);
또는
LinearLayout ll =(LinearLayout)li.inflate (R.layout.region_main_header, this, true);
this 는 attach할 rootViewGroup 이다
true,false는 attach여부
안드로이드 help
Inflate a new view hierarchy from the specified xml resource.
| |
Inflate a new view hierarchy from the specified xml node.
| |
Inflate a new view hierarchy from the specified XML node.
| |
Inflate a new view hierarchy from the specified xml resource. |
3. LayoutInflater 사용예
1) 암시적으로 사용됨
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
....
}
setContentView내부에서 LayoutInflater 사용
li.inflate (R.layout.home, this, true);
2) 리스트뷰의 커스텀 BaseAdapter에서 객첵화 해야 하는 경우 사용
private class TableListAdapter extends BaseAdapter {
private LayoutInflater mInflater
TableListAdapter() {
mInflater = (LayoutInflater)
getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); }
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.home_list_row, parent, false);
}
......
return convertView;
}
}
3) 커스텀뷰를 만들어 사용하는 경우
public class VideoThumbView extends RelativeLayout {
RemoteImageView mImageView;
public VideoThumbView(Context context) {
super(context);
create(context);
}
public VideoThumbView(Context context, AttributeSet attrs) {
super(context, attrs);
create(context);
}
private void create(Context context)
{
String service = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater li = (LayoutInflater)context.getSystemService (service);
li.inflate (R.layout.video_thumb, this, true);
mImageView = (RemoteImageView )findViewById(R.id.video_thumb_image);
mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
}
}
4) XML 리소를 객체화 하여 사용하는 경우
private void setLayout() {
mTableListView=(ListView)findViewById(R.id.home_table_list);
mInflater = (LayoutInflater)getSystemService (Context.LAYOUT_INFLATER_SERVICE);
mHeaderView = mInflater.inflate(R.layout.home_list_header,mTableListView, false);
mImagePageLabel=(TextView)mHeaderView.findViewById(R.id.home_image_page);
mImageGallery=(Gallery)mHeaderView.findViewById(R.id.home_image_slide);
mImageTextLabel=(TextView)mHeaderView.findViewById(R.id.home_image_text);
mVideoPageLabel=(TextView)mHeaderView.findViewById(R.id.home_video_page);
mVideoGallery=(FilingGallery)mHeaderView.findViewById(R.id.home_video_slide);
mTableListView.addHeaderView(mHeaderView);
}
'Android' 카테고리의 다른 글
안드로이드/Android 픽셀(pixel), 디피(dp) 계산법 ~! (0) | 2013.03.28 |
---|---|
안드로이드/Android 해상도 관련 API 모음 (단말 가로/세로 해상도, Density, dp -> px, px-> dp) (0) | 2013.03.28 |
Android: Intent 활용 사례 (0) | 2011.11.16 |
안드로이드 표준코딩스타일 가이드 (0) | 2011.07.14 |
파일명으로 리소스 가져오기 (0) | 2011.07.10 |