介绍 

有时,我们想在一个window中显示多个视图,这时就需要用到Tab容器。在Android里它叫TabHost。

使用TabHost有两种方式:

  1. 在相同的activity中使用TabHost导航多个视图
  2. 使用TabHost导航多个Activity(通过intents)
Tab应用的结构 TabHost的Activity的结构如下:


1 layout 文件 main.xml 代码:
<?xml version="1.0" encoding="utf-8"?>                                                                                                              

2Activity代码

import android.app.TabActivity;import android.graphics.Color;import android.os.Bundle;import android.view.View;import android.widget.AnalogClock;import android.widget.TabHost;import android.widget.TabHost.TabSpec;import android.widget.TextView; public class MainActivity1 extends TabActivity {@Override    public void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.main);      TabHost tabHost=(TabHost)findViewById(android.R.id.tabhost);      tabHost.setup();  // 如果使用TabAcitivity 作为你的Activity 的基类,    // 你不用调用Tabost.Setup方法          TabSpec spec1=tabHost.newTabSpec("Tab 1");      spec1.setContent(R.id.tab1);      spec1.setIndicator("Tab 1");            TabSpec spec2=tabHost.newTabSpec("Tab 2");      spec2.setIndicator("Tab 2");     spec2.setContent(R.id.tab2);     TabSpec spec3=tabHost.newTabSpec("Tab 3");      spec3.setIndicator("Tab 3");      spec3.setContent(R.id.tab3);         tabHost.addTab(spec1);      tabHost.addTab(spec2);      tabHost.addTab(spec3);       }  }

效果:



  1. 这里通过TabSpecs类创建Tab
  2. 使用setIndicator方法设置tab的文字
  3. 使用setContent设置tab的内容
  4. 如果你使用TabActivity作为你的Activity的基类,你不用调用TabHost.Setup()方法。
同时还可以指定indicator为一个view:
TabSpec spec1=tabHost.newTabSpec("Tab 1");spec1.setContent(R.id.tab1);TextView txt=new TextView(this);txt.setText("Tab 1");txt.setBackgroundColor(Color.RED);spec1.setIndicator(txt);

设置tab的内容 上面的例子展示了使用tab显示不同的layout资源。如果我们需要通过tab导航到不同的Activity,该怎么办? 这种情况,我们需要有一个activity作为应用的根activity。这个Activity包含TabHost,通过intents导航不同的activity。 注意:根Activity必须继承TabActivity。代码如下: Layout:
<?xml version="1.0" encoding="utf-8"?>                      

Activity:

public class TabDemo extends TabActivity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        TabHost tabHost=getTabHost();        // no need to call TabHost.Setup()                        //First Tab        TabSpec spec1=tabHost.newTabSpec("Tab 1");        spec1.setIndicator("Tab 1",getResources().getDrawable(R.drawable.sun));        Intent in1=new Intent(this, Act1.class);        spec1.setContent(in1);                TabSpec spec2=tabHost.newTabSpec("Tab 2");        spec2.setIndicator("Tab 2",getResources().getDrawable(R.drawable.chart));        Intent in2=new Intent(this,Act2.class);        spec2.setContent(in2);        tabHost.addTab(spec2);        tabHost.addTab(spec3);    }}

以上的会发生运行错误,可能是在我写的时候,android版本更新了。所以旧代码运行起来有问题。有知道原因的朋友可以留言。


在运行时添加Tab 在运行时我们可以通过调用TabSepc.setContent(TabContentFactory)方法添加Tab。
import android.app.TabActivity;import android.graphics.Color;import android.os.Bundle;import android.view.View;import android.widget.AnalogClock;import android.widget.TabHost;import android.widget.TabHost.TabSpec;import android.widget.TextView; public class MainTabActivity extends TabActivity {@Override    public void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.main);      TabHost tabHost=(TabHost)findViewById(android.R.id.tabhost);      tabHost.setup();  // 如果使用TabAcitivity 作为你的Activity 的基类,    // 你不用调用Tabost.Setup方法      //    TabSpec spec1=tabHost.newTabSpec("Tab 1");  //    spec1.setContent(R.id.tab1);  //    spec1.setIndicator("Tab 1");  //        TabSpec spec1=tabHost.newTabSpec("Tab 1");    spec1.setContent(R.id.tab1);    TextView txt=new TextView(this);    txt.setText("Tab 1 in a View L");    txt.setBackgroundColor(Color.RED);    spec1.setIndicator(txt);          TabSpec spec2=tabHost.newTabSpec("Tab 2");      spec2.setIndicator("Tab 2");     // method 1 , setContent(int)     spec2.setContent(R.id.tab2);        // method 2 , setContent(Intent)    // method 3 , setContent(TabHost.TabContentFactory)//    spec2.setContent(new TabHost.TabContentFactory() {//    public View createTabContent(String tag) {  //       return (new AnalogClock(MainTabActivity.this));  //    }  //     });        TabSpec spec3=tabHost.newTabSpec("Tab 3");      spec3.setIndicator("Tab 3");      spec3.setContent(R.id.tab3);         tabHost.addTab(spec1);      tabHost.addTab(spec2);      tabHost.addTab(spec3);       }  }


运行效果





原地址:http://blog.csdn.net/xinem/article/details/7083523

更多相关文章

  1. android中的search dialog
  2. 浅谈android的am命令
  3. 2011.07.20(2)——— android 计算当前坐标是否在view内
  4. Android软键盘弹出时的界面控制方法
  5. Android之实现滑动开关组件
  6. android Intent常见应用
  7. android编程语言如何实现一个简单的手机打电话应用程序
  8. Android仿ios年龄、生日、性别滚轮效果
  9. Handler: Service中使用Toast

随机推荐

  1. Android(安卓)开启闪光灯做手电筒 源码
  2. Android(安卓)ClickableSpan 应用实例
  3. Android(安卓)通过handler和message在子
  4. android访问webservice
  5. Android(安卓)恐怖幽灵音效 程序(源码详解
  6. Android剪切板
  7. MeidaProvider 流程学习笔记
  8. Android(安卓)AsyncTask 异步任务取消
  9. Android动态刷新listview中的数据
  10. Not targeting the latest versions of A