꿈꾸는 시스템 디자이너

TabActivity 구성 방법(동적 방법) 본문

Development/Android

TabActivity 구성 방법(동적 방법)

독행소년 2012. 4. 4. 13:37

 

1. TabActivity를 상속하여 구현하는 방법

package com.android.hellotabs;

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를 통해 구현하는 방법

 

package com.android.example.tabhost;

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;
     }
 }

Comments