Tab标签接口的用简单的应用是把不同的标签页的接口组件集中放在同一个接口布局文件,而且程序代码也会集中放在主类的程序文件中。这种方法的好处就是项目中的文件数目不会增加,但是如果Tab标签的接口组件个数比较多,或者是程序代码比较复杂,把它们集中放在同一个文件会造成日后程序维护上的困难。我们已经学习过Intent对象的使用方法,这里我们就用Intent对象来建立Tab标签页接口。这个新的方法其实是基于一个很简单的概念,就是每一个Tab标签页都对应到一个独立的Activity类,因此不同标签页的接口布局文件和程序代码都是各自独立,如此一来就可以减少接口布局文件和程序代码的复杂性,使它们易于阅读和维护。
(1)要完成Tab标签接口需要一个TabHost组件,它负责管控整个Tab标签页的架构。TabHost组件下包含有两个组件:TabWidget组件和FrameLayout组件。TabWidget组件负责掌控所有的Tab标签,FrameLayout组件则负责显示每一个Tab标签页的接口组件。
(2)建立Tab标签页接口有2种方法,一种是把每一个Tab page内的接口组件都一齐写在同一个布局文件中,但是用不同的<LinearLayout>标签把不同的Tab page 内的接口组件分隔开来。另一种方式是把每一个Tab page内的接口组件都写成一个独立的接口布局文件,再利用Intent的方法把它加载到对应的Tab page中,这中方法需要用到Intent技术。
下面就来讲解下第一种方法,为使用Intent对象做铺垫:
<TabHost xmlns:android="http://schemas.android.com/apk.res/android"
android:id="@+id/tabHost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Tab Widget android:id="@+id/tabs"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
<!--TabWidget标签的id一定要设定成@android:id/tabs; FrameLayout标签的id一定要设定成@android:id/tabcontent-->
<FrameLayout android:id="@+id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout android:id="@+id/tab1"
android:orientaion="vertical"
android:layout_width="fill_parent"
android:layout_height="warp_content"
android:paddingTop="70dp"
>
<!-- 第一个Tab page的接口组件-->
</LinearLayout>
<LinearLayout android:id="@+id/tab1"
android:orientaion="vertical"
android:layout_width="fill_parent"
android:layout_height="warp_content"
android:paddingTop="70dp"
>
<!-- 第二个Tab page的接口组件-->
</LinearLayout>
</FrameLayout>
</TabHost>
package tw.android;
import java.util.Calendar;
import android.app.*;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.*;
import android.widget.TabHost.TabSpec;
public class TabPageDemo extends Activity{
//继承的类仍然是Activity
private DatePicker mDatePik;
private TimePicker mTimePik;
private TextView mTxtResult;
private Button mBtnOk;
privte Button mBtnOk;
//创建新想Handler对象
private Handler mHandler=new Handler();
/**Called when the activity is first created */
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupViewComponent();
}
private void setupViewComponent(){
//从资源R中获取接口组件并设定属性
TabHost tabHost=(TabHost)findViewById(R.id.tabHost);
tabHost.setup();
TabSpec spec=tabHost.newTabSpec("tab1");
spec.setContent(R.id.tab1);
spec.setIndicator("日期和时间",getResource().getDrawable(android.R.drawable.ic_lock_idle_alarm)
);
tabHost.addTab(spec);
spec=tabHost.newTabSpec("tab2");
spec.setIndicator("ProgressBar Demo",getResource().getDrawable(android.R.drawable.ic_dialog_alert)
);
spec.setContent(R.id.tab2);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
//下面内容就是将原来的setupViewComponent()方法内的全部程序代码,程序启动时候加载的程序setCurrentTab(0),0代表第一个Tab page ,1代表地二个Tab page ,其他依次类推
}
}