TabActivity 구성 방법(동적 방법)
1. TabActivity를 상속하여 구현하는 방법
import android.app.TabActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.TabHost;
public class HelloTabs extends TabActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TabHost tabHost = getTabHost();
/**
* LayoutInflater.from(this)
* -> LayoutInflater 생성
* .inflate(R.layout.main, tabHost.getTabContentView(), true)
* -> main.xml 파일을 객체화
* -> tabHost의 TabContentView에다 main.xml 객체를 연결
* -> getTabContentView()는 TabContentView를 생성하여 반환함. setContentView()효과를 동시에 가짐
*/
LayoutInflater.from(this).inflate(R.layout.main,
tabHost.getTabContentView(), true);
/**
* .setIndicator("tab1").setContent(R.id.view1)
* ->"tab1" 이름을 가지는 인디케이터에 view.xml 객체를 등록
* tabHost.newTabSpec("tab1").setIndicator("tab_1")
* -> tab1 TabSepc 객체을 만들고 인디케이터를 연결함. 인디케이셔에는 "tab_1"라는 레벨이 표시됨
* -> TabSpec을 객체는 newTabSpec()을 통해 인스턴스를 생성함
*/
tabHost.addTab(tabHost.newTabSpec("tab1")
.setIndicator("tab_1")
.setContent(R.id.view1));
tabHost.addTab(tabHost.newTabSpec("tab2")
.setIndicator("tab_2")
.setContent(R.id.view2));
tabHost.addTab(tabHost.newTabSpec("tab3")
.setIndicator("tab_3")
.setContent(R.id.view3));
}
}
2. TabActivity 상속과 함께 TabContentFactory를 통해 구현하는 방법
import android.app.TabActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TabHost;
import android.widget.TextView;
// TabActivity로 클래스 생성
// 탭의 내용물을 생성하기 위해 구현하기 위해 TabContentFactory 구현
public class HelloTabs extends TabActivity implements TabHost.TabContentFactory {
//View v;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//getTabHost()를 호출하여 탭호스트 생성
TabHost tabHost = getTabHost();
//인플레이터를 생성하고, 본 엑티비티의 TabContentView에 main.xml 객체를 연결함
LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(), true);
//TabSpec클래스의 인스튼터를 newTabSpec()을 호출하여 생성. factory 방식
tabHost.addTab(tabHost.newTabSpec("tab1")
.setIndicator("tab1", getResources().getDrawable(android.R.drawable.star_big_on))
.setContent(R.id.view1));
tabHost.addTab(tabHost.newTabSpec("tab2")
.setIndicator("tab2", getResources().getDrawable(android.R.drawable.star_big_off))
.setContent(R.id.view2));
/*
* .setContent(this)
* ->this를 통해 컨텐트를 설정한다는 것은 본 activity자체가 컨텐트가 된다는 것을 의미함
* -> 즉 TabContentFactory를 구현하는 createTabContent()가 호출됨
* -> lazy binding 되어서, 사용자가 tab3를 처음 선택했을 때 View 객체가 생성됨
*/
tabHost.addTab(tabHost.newTabSpec("tab3")
.setIndicator("tab3", getResources().getDrawable(android.R.drawable.stat_notify_call_mute))
.setContent(this));
//.setContent(Intent intent)를 이용하여 다른 액티비티를 호출할 수도 있음
}
//TabContentFactory의 구현 메소드
public View createTabContent(String tag) {
TextView tv = new TextView(this);
tv.setText("Content for tab with tag " + tag);
return tv;
}
}