Tab控件即标签页,可以在一页中切换显示n页内容,要使用此效果,需要用到TabHost和Tabwidget类。
Tab控件具有两种实现过程,一是在同一个Activity中切换显示不同的标签页,二是每个标签页都由独立的Activity实现。我们首先用第二种方法来实现。
新建一个TabHostActivity,它继承自TabActivity,
public class TabHostActivity extends TabActivity{};
他的布局文件tabhostlayout.xml:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@android:id/tabhost" > <!--注意这里,id的设置方法跟普通控件不同,必须为tabhost -->
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TabWidget <!--TabWidget控件和FrameLayout控件是必须的,分别用来表示标签和标签下面的内容,同样注意其id选项的设置 -->
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="wrap_content" />
</LinearLayout>
</TabHost>
TabHostActivity类的源码:
public class TabHostActivity extends TabActivity{
Intent intent;
TabHost.TabSpec tabSpec;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.tabhostlayout);
Resources res=getResources();
TabHost tabHost=getTabHost();
intent = new Intent(TabHostActivity.this,Tab1Activity.class);
tabSpec = tabHost.newTabSpec("tab1"); //创建一个新的标签页,标记为“tab1”
tabSpec.setIndicator("tab1", res.getDrawable(R.drawable.ic_launcher));//设置tab页的名称和图像表示
tabSpec.setContent(intent);//设置此tab跳转到的Activity
tabHost.addTab(tabSpec);//将此tab加入到tabHost
intent = new Intent(TabHostActivity.this,Tab2Activity.class);
tabSpec=tabHost.newTabSpec("tab2");
tabSpec.setIndicator("tab2", res.getDrawable(R.drawable.ic_launcher));
tabSpec.setContent(intent);
tabHost.addTab(tabSpec);
tabHost.setCurrentTab(1);//设置当期的tab页,从0开始偏移
}
}
然后新建Tab1Activity类,并为其建立布局文件tab1layout.xml,在其中实现tab1页的显示内容
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="this is in tab1 !" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK" />
</LinearLayout>
同样新建Tab2Activity类,并为其建立布局文件tab2layout.xml,在其中实现tab2页的显示内容
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/editText"
android:layout_width="200dp"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK" />
</LinearLayout>
将以上三个Activity添加到manifest文件中即可。
另外一种方法中,各tab都在一个Activity中,在下一篇中进行介绍。