TabHost是整个Tab的容器,包括两部分,TabWidget和FrameLayout。TabWidget就是每个tab的标签,FrameLayout则是tab内容。
但是,实践告诉我们,建立这个布局文件不一定要同时存在,在android的说明demo中,是使用的。布局如下:
<?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"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp" /> </LinearLayout> </TabHost>
这样也是可以的。但是还可以这样动态做。(没有TabWidget和FrameLayout)
布局文件如下:
<?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"
android:id="@+id/tab1"
>
<!--
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent" android:layout_height="wrap_content" />
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:padding="5dp" />
-->
<Button android:id="@+id/redirect" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="切换到第三个标签" />
<ImageView android:id="@+id/imageview" android:layout_width="fill_parent"
android:layout_height="300dp" android:background="#000000"
android:src="@drawable/background" />
</LinearLayout>
</TabHost>
那么和demo中不同之后,我们Activity中应该这样。
不用: // setContentView(R.layout.main);
而是这样装载:
//装载main.xml布局文件
LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(), true);
// intent=new Intent();
//intent.setClass(this,ArtistsActivity.class);
//为第一个tab初始化TabSpec并加入TabHost
spec=tabHost.newTabSpec("tab1");
spec.setIndicator("第一个标签", res.getDrawable(R.drawable.ic_tab_artists_grey));
spec.setContent(R.id.tab1);
tabHost.addTab(spec);
这样之后,第一个标签显示的就是我们的main.xml布局。main.xml布局上面有给出。明明没有TabWidget和FrameLayout这两个。为什么还可以运行TabHost呢。
原因就是我们动态装载了。而这种方法往往比较实用。
LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(), true);
比如说:如果在第一个Tab里面有一个按钮,点击之后跳到第二个或者第三个tab。这样的话,只能使用
getTabHost().setCurrentTabByTag("课程列表");
Activity中的代码(必须继承TabActivity)
package com.xiehande.tabwidget.activity;
import org.apache.http.impl.client.TunnelRefusedException;
import android.app.Activity;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
public class MainActivity extends TabActivity {
Button redirect;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
//获取Resources
Resources res=getResources();
//获取TabHost
TabHost tabHost=getTabHost();
//获取TabHost.TabSpec
TabHost.TabSpec spec;
//获取Intent
Intent intent ;
//装载main.xml布局文件
LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(), true);
// intent=new Intent();
//intent.setClass(this,ArtistsActivity.class);
//为第一个tab初始化TabSpec并加入TabHost
spec=tabHost.newTabSpec("tab1");
spec.setIndicator("第一个标签", res.getDrawable(R.drawable.ic_tab_artists_grey));
spec.setContent(R.id.tab1);
tabHost.addTab(spec);
intent=new Intent().setClass(this, AlbumsActivity.class);
//为第二个tab初始化TabSpec并加入TabHost
spec=tabHost.newTabSpec("albums");
spec.setIndicator("相册", res.getDrawable(R.drawable.ic_tab_artists_grey));
spec.setContent(intent);
tabHost.addTab(spec);
//为第三个tab初始化TabSpec并加入TabHost
intent=new Intent().setClass(this, SongsActivity.class);
spec=tabHost.newTabSpec("课程列表").setIndicator("课程列表", res.getDrawable(R.drawable.ic_tab_artists_grey)).setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
redirect=(Button) findViewById(R.id.redirect);
redirect.setOnClickListener(listenter);
}
private OnClickListener listenter=new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
getTabHost().setCurrentTabByTag("课程列表");
}
};
}