Android 中的TabHost控件的使用

介绍 

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

使用TabHost有两种方式:

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

1 layout 文件 main.xml 代码:
 
      
  
      
      
	      

		    
 
          
	       
	    

	        
  
          
	       
	    

			
	     
	       
      
      
  

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);  
     }  
}

效果:
Android 中的TabHost控件的使用_第2张图片
Android 中的TabHost控件的使用_第3张图片

  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:


    
    
     
     
    

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);  
     }  
}


运行效果

Android 中的TabHost控件的使用_第4张图片
Android 中的TabHost控件的使用_第5张图片


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

你可能感兴趣的:(android)