Android之TabHost布局

來源:互聯網
上載者:User

1.概念

      盛放Tab的容器就是TabHost。TabHost的實現有兩種方式:

      第一種繼承TabActivity,從TabActivity中用getTabHost()方法擷取TabHost。各個Tab中的內容在布局檔案中定義就行了。

      第二種方式,不繼承TabActivity,在布局檔案中定義TabHost即可,但是TabWidget的id必須是@android:id/tabs,FrameLayout的id必須是@android:id/tabcontent。

 2.案例

1)繼承TabActivity

res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 定義TabHost組件 -->
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent">
  <!-- 定義第一個標籤頁的內容 -->
  <LinearLayout android:id="@+id/tab01" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
    <!-- 定義兩個TextView用於顯示標籤頁中的內容 -->
    <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="孫悟空-2011/07/12"/>
    <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="豬八戒-2011/07/10"/>
  </LinearLayout>
  <!-- 定義第二個標籤頁的內容 -->
  <LinearLayout android:id="@+id/tab02" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
    <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="薩僧-2011/07/11"/>
    <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="唐僧-2011/07/10"/>
  </LinearLayout>
  <!-- 定義第三個標籤頁的內容 -->
  <LinearLayout android:id="@+id/tab03" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
    <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="孫悟空-2011/07/12"/>
    <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="薩僧-2011/07/08"/>
  </LinearLayout>
</TabHost>

HelloTabHost.java

 public class HelloTabHost extends TabActivity {

  @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //調用TabActivity的getTabHost()方法擷取TabHost對象
    TabHost tabHost = getTabHost();

    //設定使用TabHost布局
    LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(),true);

     //添加第一個標籤頁
    tabHost.addTab(tabHost.newTabSpec("tab01").setIndicator("已接電話").setContent(R.id.tab01));

    //添加第二個標籤頁,並在其標籤上添加一個圖片
    tabHost.addTab(tabHost.newTabSpec("tab02").setIndicator("未接電話",getResources().getDrawable(R.drawable.icon)).setContent(R.id.tab02));

    //添加第三個標籤頁
    tabHost.addTab(tabHost.newTabSpec("tab03").setIndicator("已撥電話").setContent(R.id.tab03));
  }
 }

運行效果:

2)不繼承TabActivity

     繼承普通Activity,<TabWidget>標籤id必須為tabs、<FrameLayout>標籤id必須為tabcontent.這個方式在通過findViewById獲得TabHost之後,必須要調用setup方法。

main.xml代碼
<?xml version="1.0" encoding="utf-8"?>  
<!-- TabHost必須包含一個 TabWidget和一個FrameLayout-->
<TabHost android: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-->
<TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<!-- FrameLayout的id屬性必須為 @android:id/tabcontent-->
<FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:id="@+id/view1" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
<TextView android:id="@+id/view2" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
<TextView android:id="@+id/view3" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>

Java代碼

public class TabHostTest extends Activity {  
@Override
public void 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));
}
}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.