안드로이드 개발 정보
(글 수 1,071)
탭을 세로로 놓는거 저도 좀 쉽게 생각했던게 사실입니다.
어차피 탭위젯이 리니어 레이아웃이니까 말이죠...
걍 오리엔테이션 버티컬 하면 되지라는 생각이었는데
생각보다 탭위젯에 박혀있는코드들이 넘 많습니다.
잴큰 이유가... 기본 탭 인디케이터에 주는 효과때문인것으로 보입니다.
그거 아니면 굳이 그런것을 다 세팅할 필요가 없거든요...
소스를 보면서 고민하던차에 드디어 알아냈습니다.
res/layout/vertical_tab_main.xml
탭인디케이터를 보면 모양이 이상하다는 느낌이 드실겁니다.
기본 탭 인디케이터를 제대로 모양이 나게 하려면 TabHost와 TabWidget을 잘 구현하는 방법밖에 없어보입니다.
단순히 배치만 세로로 나오게 만든거구요...
탭인디케이터에 커스텀 뷰를 주시는것을 추천합니다.
어차피 탭위젯이 리니어 레이아웃이니까 말이죠...
걍 오리엔테이션 버티컬 하면 되지라는 생각이었는데
생각보다 탭위젯에 박혀있는코드들이 넘 많습니다.
잴큰 이유가... 기본 탭 인디케이터에 주는 효과때문인것으로 보입니다.
그거 아니면 굳이 그런것을 다 세팅할 필요가 없거든요...
소스를 보면서 고민하던차에 드디어 알아냈습니다.
setContentView(R.layout.vertical_tab_main);
TabHost tabHost = (TabHost)findViewById(R.id.tabhost);
tabHost.setup(getLocalActivityManager());
tabHost.getTabWidget().setOnHierarchyChangeListener(new OnHierarchyChangeListener() {
@Override
public void onChildViewRemoved(View parent, View child) {
// TODO Auto-generated method stub
}
@Override
public void onChildViewAdded(View parent, View child) {
// TODO Auto-generated method stub
final LinearLayout.LayoutParams lp = new LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
0, 1.0f);
lp.setMargins(0, 0, 0, 0);
child.setLayoutParams(lp);
}
});
Intent intent = new Intent();
intent.setAction("android.settings.WIFI_SETTINGS");
TabSpec spec = tabHost.newTabSpec("a");
spec.setIndicator("a");
spec.setContent(intent);
tabHost.addTab(spec);
TabSpec spec2 = tabHost.newTabSpec("b");
spec2.setIndicator("b");
spec2.setContent(intent);
tabHost.addTab(spec2);
tabHost.getTabWidget().setOrientation(LinearLayout.VERTICAL);res/layout/vertical_tab_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:theme="@android:style/Theme.NoTitleBar">
<TabHost android:id="@+id/tabhost" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget android:id="@android:id/tabs"
android:layout_width="100dip" 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"
android:paddingTop="0px">
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
탭인디케이터를 보면 모양이 이상하다는 느낌이 드실겁니다.
기본 탭 인디케이터를 제대로 모양이 나게 하려면 TabHost와 TabWidget을 잘 구현하는 방법밖에 없어보입니다.
단순히 배치만 세로로 나오게 만든거구요...
탭인디케이터에 커스텀 뷰를 주시는것을 추천합니다.



