android之tabhost讲解

Tab标签页是界面设计时经常应用的界面控件,可以实现多个分页之间的快速切换,每个分页可以显示不合的内容
Tab标签页的应用
      1.起首要设计所有的分页的界面布局
      2.在分页设计完成后,应用代码建树Tab标签页,并给每个分页添加标识和题目
      3.最后断定每个分页所显示的界面布局
      每个分页建树一个XML文件,用以编辑和保存分页的界面布局,应用的办法与设计通俗用户界面没有什么差别


应用Tab标签页的一般步调
起首要设计所有的分页的界面布局
Activity持续TabActivity
调用TabActivity的getTabHost()办法获得TabHost对象
经由过程TabHost创建Tab


 


所谓的tabhost供给选项卡(Tab页)的窗口视图容器.此对象包含两个子对象: 一个是应用户可以选择指定标签页的标签的凑集;另一个是用于显示标签页内容的 FrameLayout. 选项卡中的个别元素一般经由过程其容器对象来把握,而不是直接设置子元素本身的值.


先演示一个简单的例子,只有一个Activity,但要重视的是持续tabActivity这个类


第一步:在布局文件中main.xml敲入代码。重视这里用了FrameLayout,首要特点是可以覆盖其他内容,只显示当前的


View Code 

 1 <?xml version="1.0" encoding="utf-8"?>
2
3 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
4 android:id="@+id/FrameLayout01"
5 android:layout_width="wrap_content"
6 android:layout_height="wrap_content">
7
8 <TextView
9 android:id="@+id/TextView01"
10 android:layout_width="wrap_content"
11 android:layout_height="wrap_content"
12 android:text="所有通话记录"></TextView>
13
14 <TextView
15 android:id="@+id/TextView02"
16 android:layout_width="wrap_content"
17 android:layout_height="wrap_content"
18 android:text="已接来电"></TextView>
19
20 <TextView
21 android:id="@+id/TextView03"
22 android:layout_width="wrap_content"
23 android:layout_height="wrap_content"
24 android:text="未接来电"></TextView>
25
26 </FrameLayout>



第二步:编写layouttab01Activity.java这个文件,斗劲简单。


View Code 

 1 package cn.edu.zwu.tel;
2
3 import android.app.TabActivity;
4 import android.os.Bundle;
5 import android.view.LayoutInflater;
6 import android.widget.TabHost;
7 import android.widget.Toast;
8 import android.widget.TabHost.OnTabChangeListener;
9
10
11 public class LayoutTab01Activity extends TabActivity {
12 @Override
13 public void onCreate(Bundle savedInstanceState) {
14 super.onCreate(savedInstanceState);
15
16 TabHost th = getTabHost();
17 //声明TabHost,然后用LayoutInflater过滤出布局来,给TabHost加上含有Tab页面的FrameLayout
18 //(this)从这个TabActivity获取LayoutInflater  
19 //R.layout.main 存放Tab布局
20 //经由过程TabHost获得存放Tab标签页内容的FrameLayout  
21 //是否将inflate 拴系到根布局元素上
22 LayoutInflater.(this).inflate(R.layout.main, th.getTabContentView(), true);
23 //经由过程TabHost获得存放Tab标签页内容的FrameLayout,
24 //newTabSpecd的感化是获取一个新的 TabHost.TabSpec,并接洽关系到当前 TabHost
25 //setIndicator的感化是指定标签和图标作为选项卡的指导符.
26 //setContent的感化是指定用于显示选项卡内容的视图 ID.
27 th.addTab(th.newTabSpec("all").setIndicator("所有通话记录", getResources().getDrawable(R.drawable.call_forward)).setContent(R.id.TextView01));
28 th.addTab(th.newTabSpec("ok").setIndicator("已接来电",getResources().getDrawable(R.drawable.phone_call)).setContent(R.id.TextView02));
29 th.addTab(th.newTabSpec("cancel").setIndicator("未接来电",getResources().getDrawable(R.drawable.call_bluetooth)).setContent(R.id.TextView03));
30 //setOnTabChangeListener的功课是注册一个回调函数,当任何一个选项卡的选中状况产生改变时调用.
31 th.setOnTabChangedListener(
32 new OnTabChangeListener() {
33 @Override
34 public void onTabChanged(String tabId) {
35 Toast.makeText(LayoutTab01Activity.this, tabId, Toast.LENGTH_LONG).show();
36 }
37 }
38 );
39 }
40 }



 


演示结果图:



 


第二种办法:没有效到FrameLayout这个布局,而直接用了listview,创建选项卡内容的回调函数creatTabContent()实现的


第一步:编写main.xml文件,具体代码如下


View Code 

 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:orientation="vertical" >
6
7 <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="@string/hello" />
11
12 </LinearLayout>



第二步;编写layoutTabActivity.java文件,具体申明都注释在代码里


View Code 

 1 package cn.edu.zwu.tel;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import android.app.TabActivity;
6 import android.os.Bundle;
7 import android.view.View;
8 import android.widget.ArrayAdapter;
9 import android.widget.ListView;
10 import android.widget.TabHost;
11
12 //TabContentFactory的意思是当某一选项卡被选中时生成选项卡的内容.
13 //若是你的选项卡的内容按某些前提来生成, 请应用该接口.例如:不显示既存的视图而是启动活动.
14 public class LayoutTab02Activity extends TabActivity implements TabHost.TabContentFactory {
15
16 @Override
17 public void onCreate(Bundle savedInstanceState)
18 {
19 super.onCreate(savedInstanceState);
20 TabHost th = getTabHost();
21 //newTabSpecd的感化是获取一个新的 TabHost.TabSpec,并接洽关系到当前 TabHost
22 //setIndicator的感化是指定标签和图标作为选项卡的指导符.
23 //setContent的感化是指定用于显示选项卡内容的视图 ID.
24 th.addTab(th.newTabSpec("all").setIndicator("所有通话记录").setContent(this));
25 th.addTab(th.newTabSpec("ok").setIndicator("已接来电").setContent(this));
26 th.addTab(th.newTabSpec("cancel").setIndicator("未接来电").setContent(this));
27 }
28 //创建选项卡内容的回调函数.
29 public View createTabContent(String tag)
30 {
31 ListView lv = new ListView(this);
32 List<String> list = new ArrayList<String>();
33 list.add(tag);
34 if(tag.equals("all"))
35 {
36 list.add("tom");
37 list.add("kite");
38 list.add("rose");
39 }else if(tag.equals("ok"))
40 {
41 list.add("tom");
42 list.add("kite");
43 }else
44 {
45 list.add("rose");
46 }
47
48 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
49 android.R.layout.simple_list_item_checked, list);
50 lv.setAdapter(adapter);
51 return lv;
52 }
53 }

你可能感兴趣的:(android之tabhost讲解)