나는 이것에 대해 약간의 대화를 보았지만 명확한 것은 없습니다. TabWidget의 탭을 화면 하단에 배치하는 방법이 있습니까? 그렇다면 어떻게?
다음을 시도했지만 작동하지 않았습니다.
a) 프레임 레이아웃 아래에 탭 위젯
설정 b) 탭 위젯의 중력을 "아래쪽"으로 설정
감사! llappall
나는 이것에 대해 약간의 대화를 보았지만 명확한 것은 없습니다. TabWidget의 탭을 화면 하단에 배치하는 방법이 있습니까? 그렇다면 어떻게?
다음을 시도했지만 작동하지 않았습니다.
a) 프레임 레이아웃 아래에 탭 위젯
설정 b) 탭 위젯의 중력을 "아래쪽"으로 설정
감사! llappall
답변:
화면 하단에 탭을 표시하는 가장 간단하고 강력하며 확장 가능한 솔루션입니다.
layout_height
에 wrap_content
FrameLayout이와 TabWidget 모두 android:layout_weight="1"
android:layout_weight="0"
(0은 기본값이지만 강조, 가독성 등)android:layout_marginBottom="-4dp"
(하단 분배기를 제거하기 위해)전체 코드 :
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android: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"
android:padding="5dp">
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_weight="1"/>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_marginBottom="-4dp"/>
</LinearLayout>
</TabHost>
layout_weight=1
와의 유일한 차이점은 FrameLayout에서 설정 하는 것입니다. 이렇게하면 탭 컨트롤이 LinearLayout에서 높이를 먼저 "확보"할 수 있습니다.
android:layout_marginBottom="-5px"
하십시오. 이렇게하면 TabWidget이 화면 하단에서 5 픽셀만큼 이동하여 구분선이 표시되지 않습니다. FrameLayout은 크기가 보정되므로 완벽하게 작동합니다. 더 큰 장치에서 디바이더의 크기가 변경되는지 확실하지 않습니다. dp
대신 사용해야 할 수도 있습니다 px
.
시도해보십시오.) 스크롤 할 때 처리 방법을 모르기 때문에 FrameLayout (@ id / tabcontent)의 내용을 봅니다. 내 경우에는 ListView를 탭의 내용으로 사용했기 때문에 작동합니다. . :) 그것이 도움이되기를 바랍니다.
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout
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_alignParentTop="true"
android:layout_above="@android:id/tabs" />
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
</RelativeLayout>
</TabHost>
줄을 제거하는 방법이 있습니다.
1)이 튜토리얼을 따르십시오 : android-tabs-with-fragments
2) 그런 다음 Leaudro가 위에서 제안한 RelativeLayout 변경 사항을 적용하십시오 (레이아웃 소품을 모든 FrameLayouts에 적용하십시오).
항목 # 1의 tab.xml에 ImageView를 추가하고 탭과 같은 모양의 iPhone을 얻을 수도 있습니다.
여기 내가 지금하고있는 일의 스크린 샷이 있습니다. 나는 여전히 아이콘을 선택하고 수평 분포를 동일하게 유지하기 위해 할 일이 있지만 아이디어를 얻습니다. 필자의 경우 조각을 사용하고 있지만 동일한 주체가 표준 탭보기에 적용되어야합니다.
tabWidget의 구분선을 제거하려는 모든 사람들을 위해 여기에 탭을 사용자 정의하고 탭이 맨 아래에있을 때 문제를 제거하는 데 도움이되는 예제 프로젝트 (및 해당 자습서)가 있습니다. 이클립스 프로젝트 : android-custom-tabs ; 원래 설명 : 블로그 ; 이것이 도움이 되었기를 바랍니다.
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1" />
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:background="#252a31"
android:tabStripEnabled="false" >
</TabWidget>
</LinearLayout>
</TabHost>
이것은 정확히 당신이 찾고있는 것이 아닐 수도 있습니다 (탭을 화면 하단으로 보내는 "쉬운"솔루션은 아니지만) 그럼에도 불구하고 흥미로운 대안 솔루션입니다.
ScrollableTabHost 는 TabHost처럼 작동하도록 설계되었지만 더 많은 항목에 맞게 추가 가 있습니다 ...
이 오픈 소스 프로젝트를 파헤쳐 서 질문에 대한 답변을 찾을 수 있습니다. 더 쉬운 것이 있으면 다시 연락 드리겠습니다.
화면 하단에 안드로이드 탭을 배치하려고 할 때 동일한 문제가 발생했습니다. 내 시나리오는 레이아웃 파일을 사용하지 않고 코드에서 탭을 만드는 것이 었습니다. 각 탭에서 다른 접근 방식을 사용하여 너무 복잡해 보이는 활동을 시작하려고했습니다. 그래서 문제를 극복하기위한 샘플 코드는 다음과 같습니다.
예, 참조하십시오 : link , 그는 활동이 아닌 xml 레이아웃을 사용하여 새 탭을 만들었습니다. 따라서 xml 코드 (FrameLayout-padpx에 paddingTop 설정)를 넣고 코드를 작성하십시오.
public class SomeActivity extends ActivityGroup {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tab_host = (TabHost) findViewById(R.id.edit_item_tab_host);
tab_host.setup(this.getLocalActivityManager());
TabSpec ts1 = tab_host.newTabSpec("TAB_DATE");
ts1.setIndicator("tab1");
ts1.setContent(new Intent(this, Registration.class));
tab_host.addTab(ts1);
TabSpec ts2 = tab_host.newTabSpec("TAB_GEO");
ts2.setIndicator("tab2");
ts2.setContent(new Intent(this, Login.class));
tab_host.addTab(ts2);
TabSpec ts3 = tab_host.newTabSpec("TAB_TEXT");
ts3.setIndicator("tab3");
ts3.setContent(new Intent(this, Registration.class));
tab_host.addTab(ts3);
tab_host.setCurrentTab(0);
}
}
안정적인 작업을 위해이 코드를 사용하는 것이 좋습니다. 탭의 중첩 된 조각 (예 : 중첩 된 MapFragment)에 최적화되어 있고 "활동을 유지하지 마십시오"에서 테스트했습니다 : https://stackoverflow.com/a/23150258/2765497