안드로이드 개발 정보
(글 수 1,064)
탭을 세로로 놓는거 저도 좀 쉽게 생각했던게 사실입니다.
어차피 탭위젯이 리니어 레이아웃이니까 말이죠...
걍 오리엔테이션 버티컬 하면 되지라는 생각이었는데
생각보다 탭위젯에 박혀있는코드들이 넘 많습니다.
잴큰 이유가... 기본 탭 인디케이터에 주는 효과때문인것으로 보입니다.
그거 아니면 굳이 그런것을 다 세팅할 필요가 없거든요...
소스를 보면서 고민하던차에 드디어 알아냈습니다.
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을 잘 구현하는 방법밖에 없어보입니다.
단순히 배치만 세로로 나오게 만든거구요...
탭인디케이터에 커스텀 뷰를 주시는것을 추천합니다.