android tabHost佈局之一 不繼承TabActivity並以佈局檔案進行佈局
阿新 • • 發佈:2019-01-06
上圖為最終效果圖
程式碼結構圖
main.xml
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/hometabs"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
-
<!-- TabHost必須包含一個 TabWidget和一個FrameLayout-->
- <TabHostandroid:id="@+id/tabhost"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- >
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
- <!-- TabWidget的id屬性必須為 @android:id/tabs-->
- <TabWidgetandroid:id="@android:id/tabs"
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- </TabWidget>
-
<!-- FrameLayout的id屬性必須為 @android:id/tabcontent-->
- <FrameLayoutandroid:id="@android:id/tabcontent"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextViewandroid:id="@+id/view1"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
- <TextViewandroid:id="@+id/view2"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
- <TextViewandroid:id="@+id/view3"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
- </FrameLayout>
- </LinearLayout>
- </TabHost>
- </LinearLayout>
java程式碼如下
- package cn.com.tagHost.test;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TabHost;
- import android.widget.TabWidget;
- publicclass TagHostTest2 extends Activity {
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 獲取TabHost物件
- TabHost tabHost = (TabHost) findViewById(R.id.tabhost);
- // 如果沒有繼承TabActivity時,通過該種方法載入啟動tabHost
- tabHost.setup();
- tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("第一個標籤",
- getResources().getDrawable(R.drawable.icon)).setContent(
- R.id.view1));
- tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("第三個標籤")
- .setContent(R.id.view3));
- tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("第二個標籤")
- .setContent(R.id.view2));
- }
- }
執行得到正確的結果。
廢話連篇:這裡需要注意的是
第一:佈局檔案的格式。以及TabWidget和FrameLayout的id屬性值。
第二:TabWidget代表的是標籤部分,FrameLayout代表的點選標籤後看到的內容部分。FrameLayout裡面宣告的元件意為具備成為標籤內容的資格,具體的還要在程式碼中具體指定。
你是否也想要這種結果呢。讓標籤在下部分顯示
那麼你只需要給main.xml進行下佈局修改就可以了。
main.xml
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/hometabs"android:orientation="vertical"
- android:layout_width="fill_parent"android:layout_height="fill_parent">
- <!-- TabHost必須包含一個 TabWidget和一個FrameLayout-->
- <TabHostandroid:id="@+id/tabhost"android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- <LinearLayoutandroid:orientation="vertical"
- android:layout_width="fill_parent"android:layout_height="fill_parent">
- <!-- FrameLayout的id屬性必須為 @android:id/tabcontent-->
- <FrameLayoutandroid:id="@android:id/tabcontent"
- android:layout_width="fill_parent"android:layout_height="fill_parent">
- <TextViewandroid:id="@+id/view1"android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:text="hello baby!"
- />
- <TextViewandroid:id="@+id/view2"android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
- <TextViewandroid:id="@+id/view3"android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
- </FrameLayout>
- <RelativeLayoutandroid:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <!-- TabWidget的id屬性必須為 @android:id/tabs-->
- <TabWidgetandroid:id="@android:id/tabs"
- android:orientation="horizontal"android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:paddingBottom="0dp"
- >
- </TabWidget>
- </RelativeLayout>
- </LinearLayout>
- </TabHost>
- </LinearLayout>
為了讓標籤和父容器底部持平,我們使用了android:layout_alignParentBottom="true",該屬性只有在RelativeLayout佈局中才會存在哦、這也是為什麼我們將tabWidget放入一個RelativeLayout中的原因。
此外,在lineaerLayout佈局中,TabWidget和FrameLayout的位置可是調換了哦。