원본글>>> http://rosaria1113.blog.me/110885107
|
이번에 Tab을 사용해보면서 안것이지만..
안드로이드에서 tab을 사용하는 방법은 정말 많다.
Activity를 상속받고 (Tabhost - TabWidget - FrameLayout).xml을 사용하는 방법도 있고
TabActivity를 상속받아 getTabHost()를 사용하여 TabHost를 가져와서 tab을 추가하는 방법도 있다.
내가 만드는건 하나의 Tab 안에서 사용자의 동작에 따라 해줘야 할게 많을 것 같아서 Tab을 Activity로 구성하는 방법으로 해봤다.
main.xml
xml은 위와 같이 TabHost안에 LinearLayout을 두고 그 안에 TabWidget과 하부 화면을 담당할 FrameLayout을 넣었다.
ImageEditorMainActivity.java
Tab 추가 전에 tabHost.setup()을 해야 한다.
만약 activity 호출을 위한 intent를 content로 설정하기 위해서는
tabHost.setup() 대신 tabHost.setup(getLocalActivityManager())을 해야 한다.
그런데 Actvity를 extends 한 경우에는 getLocalActivityManager()가 없다.
왜냐하면
TabActivity extends ActivityGroup extends Activity 이고, getLocalActivityManager()는 ActivityGroup class에 있는 메소드이 이기 때문이다.
따라서 위와 같이 extends ActivityGroup을 해주고 setup을 진행해 줘야 한다.
사실 위 스크린샷과 같이 화면 구성을 할거면 extends TabActivity 를 하여 간단하게 구현할 수 있다.
내가 이리 삽질을 한것은 tab은 하단으로, 화면은 Activity로 구성하고 싶어서다.
main.xml
안드로이드에서 tab을 사용하는 방법은 정말 많다.
Activity를 상속받고 (Tabhost - TabWidget - FrameLayout).xml을 사용하는 방법도 있고
TabActivity를 상속받아 getTabHost()를 사용하여 TabHost를 가져와서 tab을 추가하는 방법도 있다.
내가 만드는건 하나의 Tab 안에서 사용자의 동작에 따라 해줘야 할게 많을 것 같아서 Tab을 Activity로 구성하는 방법으로 해봤다.
main.xml
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabHost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"> </FrameLayout> </LinearLayout> </TabHost> |
xml은 위와 같이 TabHost안에 LinearLayout을 두고 그 안에 TabWidget과 하부 화면을 담당할 FrameLayout을 넣었다.
ImageEditorMainActivity.java
package com.ronze.imageeditor; import android.app.ActivityGroup; import android.content.Intent; import android.os.Bundle; import android.widget.TabHost; public class ImageEditorMainActivity extends ActivityGroup { private TabHost tabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tabHost = (TabHost)findViewById(R.id.tabHost); // TabHost 를 findViewById 로 생성한 후 Tab 추가 전에 꼭 실행 tabHost.setup(getLocalActivityManager()); tabHost.addTab(tabHost.newTabSpec("Tab_RESIZE") .setIndicator(getString(R.string.str_tab_resize)) .setContent(new Intent(this, ResizeActivity.class))); tabHost.addTab(tabHost.newTabSpec("Tab_ROTATE") .setIndicator(getString(R.string.str_tab_rotate)) .setContent(new Intent(this, RotateActivity.class))); tabHost.addTab(tabHost.newTabSpec("Tab_WATERMARK") .setIndicator(getString(R.string.str_tab_watermark)) .setContent(new Intent(this, WatermarkActivity.class))); } } |
Tab 추가 전에 tabHost.setup()을 해야 한다.
만약 activity 호출을 위한 intent를 content로 설정하기 위해서는
tabHost.setup() 대신 tabHost.setup(getLocalActivityManager())을 해야 한다.
그런데 Actvity를 extends 한 경우에는 getLocalActivityManager()가 없다.
왜냐하면
TabActivity extends ActivityGroup extends Activity 이고, getLocalActivityManager()는 ActivityGroup class에 있는 메소드이 이기 때문이다.
따라서 위와 같이 extends ActivityGroup을 해주고 setup을 진행해 줘야 한다.
사실 위 스크린샷과 같이 화면 구성을 할거면 extends TabActivity 를 하여 간단하게 구현할 수 있다.
내가 이리 삽질을 한것은 tab은 하단으로, 화면은 Activity로 구성하고 싶어서다.
main.xml
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabHost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> </FrameLayout> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout> </TabHost> |
본 블로그는 페이스북 댓글을 지원합니다.