1. 程式人生 > >android tabHost佈局之一 不繼承TabActivity並以佈局檔案進行佈局

android tabHost佈局之一 不繼承TabActivity並以佈局檔案進行佈局

上圖為最終效果圖

程式碼結構圖

 

main.xml

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:id="@+id/hometabs"
  4.     android:orientation="vertical"
  5.     android:layout_width="fill_parent"
  6.     android:layout_height="fill_parent">
  7.     <!-- TabHost必須包含一個 TabWidget和一個FrameLayout-->
  8.     <TabHostandroid:id="@+id/tabhost"
  9.         android:layout_width="fill_parent"
  10.         android:layout_height="wrap_content"
  11.         >
  12.         <LinearLayout
  13.             android:orientation="vertical"
  14.             android:layout_width="fill_parent"
  15.             android:layout_height="fill_parent"
    >
  16.             <!-- TabWidget的id屬性必須為 @android:id/tabs-->
  17.             <TabWidgetandroid:id="@android:id/tabs"
  18.               android:orientation="horizontal"
  19.               android:layout_width="fill_parent"
  20.               android:layout_height="wrap_content">
  21.             </TabWidget>
  22.             <!-- FrameLayout的id屬性必須為 @android:id/tabcontent-->
  23.              <FrameLayoutandroid:id="@android:id/tabcontent"
  24.                   android:layout_width="fill_parent"
  25.                   android:layout_height="fill_parent">
  26.                     <TextViewandroid:id="@+id/view1"
  27.                         android:layout_width="fill_parent"
  28.                         android:layout_height="fill_parent"/>
  29.                     <TextViewandroid:id="@+id/view2"
  30.                         android:layout_width="fill_parent"
  31.                         android:layout_height="fill_parent"/>
  32.                     <TextViewandroid:id="@+id/view3"
  33.                         android:layout_width="fill_parent"
  34.                         android:layout_height="fill_parent"/>
  35.              </FrameLayout>
  36.          </LinearLayout>
  37.     </TabHost>
  38. </LinearLayout>

java程式碼如下

  1. package cn.com.tagHost.test;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.widget.TabHost;  
  5. import android.widget.TabWidget;  
  6. publicclass TagHostTest2 extends Activity {  
  7.     @Override
  8.     publicvoid onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.main);  
  11.         // 獲取TabHost物件
  12.         TabHost tabHost = (TabHost) findViewById(R.id.tabhost);  
  13.         // 如果沒有繼承TabActivity時,通過該種方法載入啟動tabHost
  14.         tabHost.setup();  
  15.         tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("第一個標籤",  
  16.                 getResources().getDrawable(R.drawable.icon)).setContent(  
  17.                 R.id.view1));  
  18.         tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("第三個標籤")  
  19.                 .setContent(R.id.view3));  
  20.         tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("第二個標籤")  
  21.                 .setContent(R.id.view2));  
  22.     }  
  23. }  

執行得到正確的結果。

廢話連篇:這裡需要注意的是

第一:佈局檔案的格式。以及TabWidget和FrameLayout的id屬性值。

第二:TabWidget代表的是標籤部分,FrameLayout代表的點選標籤後看到的內容部分。FrameLayout裡面宣告的元件意為具備成為標籤內容的資格,具體的還要在程式碼中具體指定。

你是否也想要這種結果呢。讓標籤在下部分顯示

那麼你只需要給main.xml進行下佈局修改就可以了。

main.xml

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:id="@+id/hometabs"android:orientation="vertical"
  4.     android:layout_width="fill_parent"android:layout_height="fill_parent">
  5.     <!-- TabHost必須包含一個 TabWidget和一個FrameLayout-->
  6.     <TabHostandroid:id="@+id/tabhost"android:layout_width="fill_parent"
  7.         android:layout_height="wrap_content">
  8.         <LinearLayoutandroid:orientation="vertical"
  9.             android:layout_width="fill_parent"android:layout_height="fill_parent">
  10.             <!-- FrameLayout的id屬性必須為 @android:id/tabcontent-->
  11.             <FrameLayoutandroid:id="@android:id/tabcontent"
  12.                 android:layout_width="fill_parent"android:layout_height="fill_parent">
  13.                 <TextViewandroid:id="@+id/view1"android:layout_width="fill_parent"
  14.                     android:layout_height="fill_parent"
  15.                     android:text="hello baby!"
  16.                     />
  17.                 <TextViewandroid:id="@+id/view2"android:layout_width="fill_parent"
  18.                     android:layout_height="fill_parent"/>
  19.                 <TextViewandroid:id="@+id/view3"android:layout_width="fill_parent"
  20.                     android:layout_height="fill_parent"/>
  21.             </FrameLayout>
  22.             <RelativeLayoutandroid:layout_width="fill_parent"
  23.                 android:layout_height="fill_parent">
  24.                 <!-- TabWidget的id屬性必須為 @android:id/tabs-->
  25.                 <TabWidgetandroid:id="@android:id/tabs"
  26.                     android:orientation="horizontal"android:layout_width="fill_parent"
  27.                     android:layout_height="wrap_content"
  28.                     android:layout_alignParentBottom="true"
  29.                     android:paddingBottom="0dp"
  30.                     >
  31.                 </TabWidget>
  32.             </RelativeLayout>
  33.         </LinearLayout>
  34.     </TabHost>
  35. </LinearLayout>

      為了讓標籤和父容器底部持平,我們使用了android:layout_alignParentBottom="true",該屬性只有在RelativeLayout佈局中才會存在哦、這也是為什麼我們將tabWidget放入一個RelativeLayout中的原因。

此外,在lineaerLayout佈局中,TabWidget和FrameLayout的位置可是調換了哦。