TabActivity가 deprecated됨에 따라 이제 탭을 위해서는 다음의 방법을 써야한다.
참고 내용 : http://limts28.tistory.com/458
액션탭을 사용하려면 다음 메소드로 네비게이션탭으로 변경해야한다.
void setNavigationMode(int mode)
int getNavigationMode()
모드 |
설명 |
NAVIGATION_MODE_STANDARD |
로고 아이콘과 액션 항목이 배치된다. |
NAVIGATION_MODE_TABS |
액션바에 여러 개의 탭을 배치하려 페이지를 전환한다. |
NAVIGATION_MODE_LIST |
드롭다운 리스트로 페이지를 전환한다. |
액션바의 다음 메소드로 탭을 추가 삭제한다.
ActionBar.Tab newTab()
void addTab(ActionBar.Tab tab, [int position, boolean setSelected])
void removeTab(ActionBar.Tab tab)
void removeTabAt(int position)
void removeAllTabs()
newTab 메소드로 새로운 빈탭을 생성하고 addTab으로 액션바에 탭을 추가한다.
position 인수로 추가할 위치를 지정하여 중간에 삽입할 수도 있고 setSelected 인수를 true로 하여 추가 후 바로 선택할 수도 있다.
removeTab은 특정 위치의 탭을 제거, removeAllTabs는 전체 탭을 제거하여 비운다.
ActionBar.Tab setText(int resId)
ActionBar.Tab setText(CharSequence text)
ActionBar.Tab setIcon(int resId)
ActionBar.Tab setCustomView(int layoutResId)
ActionBar.Tab setCustomView(View view)
ActionBar.Tab setTag(Object obj)
ActionBar.Tab setTabListener(ActionBar.TabListener listener)
탭에 캡션 , 아이콘, 커스텀뷰를 배치하기위해 위의 메소드를 사용한다.
void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft)
void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft)
탭이 선택, 선택 해제, 재선택 될 때 위의 메소드가 호출된다.
int getTabCount()
void selectTab(ActionBar.Tab tab)
ActionBar.Tab getSelectedTab()
ActionBar.Tab getTabAt(int index)
void setSelectedNavigationItem(int position)
int getSelectedNavigationIndex()
위의 메소드는 탭을 위한 관리 메소드이다.
다음 예제는 프래그먼트를 이용해서 탭을 만든다.
res/layout/activity_action_tab.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
</LinearLayout>
res/layout/actiontab.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabparent"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</FrameLayout>
src/ActionTab.java
package com.example.actiontab;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class ActionTab extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actiontab);
ActionBar ab = getActionBar();
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//여기서 탭을 3개 만들어준다.
for(int i=0; i < 3; i++){
ActionBar.Tab tab = ab.newTab();
String Cap = "Tab" + (i + 1);
tab.setText(Cap);
//여기서는 번들에 값이 들어가 있음
TabFragment frag = TabFragment.newInstance(Cap);
tab.setTabListener(new TabListener(frag));//리스너 등록
ab.addTab(tab);
}
//화면의 방향이 바껴도 탭의 선택위치가 안바뀌게 하기위해서 함
if(savedInstanceState != null){
int seltab = savedInstanceState.getInt("seltab");
ab.setSelectedNavigationItem(seltab);
}
}
//화면의 상태 전환시 현재 상태를 저장하기 위한 메소드 오버라이딩
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putInt("seltab", getActionBar().getSelectedNavigationIndex());
}
private class TabListener implements ActionBar.TabListener{
private Fragment mFragment;
public TabListener(Fragment fragment){
mFragment = fragment;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
//탭이 선택되면 프래그먼트를 추가한다.
ft.add(R.id.tabparent, mFragment, "tag");
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
ft.remove(mFragment);
}
}
public static class TabFragment extends Fragment{
public static TabFragment newInstance(String text){
TabFragment frag = new TabFragment();
//번들에 넣어줌
//프래그먼트끼리 송수신은 번들을 이용한다.
Bundle args = new Bundle();
args.putString("text", text);//text태그에 text라는 값을 넣는다.
frag.setArguments(args);
return frag;//반환함.
}
//프래그먼트 뷰를 생성
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
//여기서 프래그먼트 UI를 그릴때 호출한다.
//그래서 여기에서 XML을 가져와서 UI를 만들어준다.
String text = "";
//프래그먼트끼리 데이터 송수신시에는 반드시 번들을 사용해야한다.
Bundle args = getArguments();
if(args != null){
text = args.getString("text");
}
//여기서 전개자를 이용해서 UI를 만드는 부분
View linear = inflater.inflate(R.layout.activity_action_tab, container, false);
TextView textview = (TextView)linear.findViewById(R.id.content);
textview.setText(text);
return linear;
}
}
}
실행 화면
다음과 같이 탭이 3개 생성된다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 - 액션바 꾸미기 (0) | 2015.10.25 |
---|---|
안드로이드 - DialogFragment에 스타일과 테마 지정하기 (0) | 2015.10.24 |
안드로이드 - 프래그먼트 대화상자를 액티비티 안에 배치하기 (0) | 2015.10.12 |
안드로이드 - DialogFragment 로 대화상자 만들기 (0) | 2015.10.11 |
[펌자료] 안드로이드 - 액티비티의 상태를 저장 및 복원하는 콜백 메소드 - onSaveInstanceState, onRestoreInstanceState (0) | 2015.10.04 |
안드로이드 - ShareActionProvider를 이용한 앱간 데이터 공유 처리하기 (0) | 2015.10.04 |
안드로이드 - 액션바의 활용 두번째 액션 프로바이더 (0) | 2015.09.28 |
안드로이드 - 프래그먼트를 이용한 간단한 사전 만들기 (0) | 2015.09.21 |