1.繼承TabActivity html
2.佈局文件中使用tabHost,tabWedgit和framework java
3.在activity中經過源碼添加tab選項卡,每一個選項卡中顯示指定activity中的內容。能夠經過代碼控制界面的顯示效果。 android
下面仍是經過一個代碼示例來講明下吧: git
(1)建立一個新的工程TestTab吧 app
(2)將生成的MainActivity的繼承類改爲TabActivity,若是沒自動生成mainactivity,那就本身手動建立一個吧: ide
public class MainActivity extends TabActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
|
(3)建立main的佈局文件 佈局
注意:TabHost ,TabWidget ,FrameLayout的ID必須分別爲@android :id/tabhost,@android :id/tabs,@android :id/tabcontent
另外還要注意一下android:layout_width寬度和android:layout_height高度的取值,還要LinearLayout的android:orientation=」vertical」(LinearLayout默認是橫向的)當你看到佈局和我不同時你就要考慮一下這裏是否是錯了。(= =!由於我錯過) flex
這裏面的TabHost就是tab區加上對應的屬性頁;TabWidget就是Tab按鈕區,FrameLayout就是屬性頁區域. ui
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TabHost
android:id="@android :id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@android :id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<TabWidget
android:id="@android :id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="horizontal" />
<!-- android:background="@drawable/jdy_tab_background"-->
</LinearLayout>
</TabHost>
</LinearLayout> |
(4)建立tab元素:TabSpec this
這裏面會涉及到對象TabSpec。該對象一般用TabHost來建立,裏面包含了一個Tab元素所包含的信息須要用戶來指定。下面來看看官方文檔的解釋吧:
A tab has a tab indicator, content, and a tag that is used to keep track of it. This builder helps choose among these options. For the tab indicator, your choices are: 1) set a label 2) set a label and an icon For the tab content, your choices are: 1) the id of a View 2) a TabHost.TabContentFactory that creates the View content. 3) an Intent that launches an Activity. |
一個tab一般包含了indicator(指示器)、content(tab對應展現的頁面view,能夠爲這個view的id或者是一個intent)、tag。其中TabSpec就是用來輔助設置這些選項。:
<1> Indicator一般是設置tab的名稱label和icon。
<2> Content:能夠是一個view的id,也能夠經過TabContentFactory建立一個view,還能夠是一個Intent組件來加載一個activity。
(5)建立兩個Activity,暫且叫FirstActivity,SecActivity,並在Manifest文件中註冊
public class SettingActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textview = new TextView(this);
textview.setText("設置頁面");
setContentView(textview);
}
} |
(6)在MainActivity中添加Tab -- 使用TabSpec
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTabHost = getTabHost();
TabSpec spec;
spec = mTabHost.newTabSpec("新建");
spec.setIndicator("新建");
spec.setContent(new Intent(this, NewTaskActivity.class));
mTabHost.addTab(spec);
spec = mTabHost.newTabSpec("設置");
spec.setIndicator("設置");
spec.setContent(new Intent(this, SettingActivity.class));
mTabHost.addTab(spec);
mTabHost.setCurrentTab(0);
} |
至此,一個簡單的tab就作完了,運行下就能夠看到結果。你也能夠根據本身的喜愛更改下每一個tab的內容的activity樣子。
(7)TabWidget說明:
|
經過上面的類繼承關係就能夠看出TabWidget是一個ViewGroup,便是一個線性佈局的容器,可以容納多個Tab。同時「The container object for this widget is TabHost」。它也是TabHost內的一個widget。
不過用過API4.0的小夥伴必定都會發現TabActivity已經被android棄用了。
TabActivity has been deprecated, cause it is subclass of ActivityGroup, which also has been deprecated.
ActityGroup has been deprecated, and instead Fragment has been introduced and suggested. As using Fragments is easier and more flexible than ActivityGroup. It also enable android components to have a homogeneous pattern.