TabHost详解

前言:今天仔细研究了下TabHost,主要是为了实现微信底部导航栏的功能,最后也给出一个链接,这位老兄用TabHost基本做出来了微信导航栏。

正文

TabHost的实现分为两种,一个是不继承TabActivity,一个是继承自TabActivity;当然了选用继承自TabActivity的话就相对容易一些,下面来看看分别是怎样来实现的吧。

方法一、定义tabhost:不用继承TabActivity

 1、布局文件:activity_main.xml


    

2、JAVA代码

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		TabHost th=(TabHost)findViewById(R.id.tabhost);
		th.setup();            //初始化TabHost容器
		
		//在TabHost创建标签,然后设置:标题/图标/标签页布局
		th.addTab(th.newTabSpec("tab1").setIndicator("标签1",getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.tab1));
		th.addTab(th.newTabSpec("tab2").setIndicator("标签2",null).setContent(R.id.tab2));
		th.addTab(th.newTabSpec("tab3").setIndicator("标签3",null).setContent(R.id.tab3));	

       //上面的null可以为getResources().getDrawable(R.drawable.图片名)设置图标 

	}
}

效果图:

TabHost详解_第1张图片

此例源码地址:http://download.csdn.net/detail/harvic880925/6657611  (不要分,欢迎下载)

 方法二:Tab的内容分开:不用继承TabActivity

 1、第一个tab的XML布局文件,tab1.xml:



       
       
 

2、第二个tab的XML布局文件,tab2.xml: 




        

3、主布局文件,activity_main.xml:



    

        

            
            

            
                
            
        
    


4、JAVA代码:

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		TabHost m = (TabHost)findViewById(R.id.tabhost);
		m.setup();
		
		LayoutInflater i=LayoutInflater.from(this);
		i.inflate(R.layout.tab1, m.getTabContentView());
		i.inflate(R.layout.tab2, m.getTabContentView());//动态载入XML,而不需要Activity
		
		m.addTab(m.newTabSpec("tab1").setIndicator("标签1").setContent(R.id.LinearLayout01));  
        	m.addTab(m.newTabSpec("tab2").setIndicator("标签2").setContent(R.id.LinearLayout02)); 

	}
}

效果图:
TabHost详解_第2张图片

此例源码地址:http://download.csdn.net/detail/harvic880925/6657679   (不要分,欢迎下载)

 方法三:继承自TabActivity

1、主布局文件,activity_main.xml:




    
          
        
    

    
    
        
        
    

	
    

2、JAVA代码: 

 先将派生自Activity改为TabActivity,然后代码如下:

 

public class MainActivity extends TabActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setTitle("TabDemoActivity");
		TabHost tabHost = getTabHost();
		LayoutInflater.from(this).inflate(R.layout.activity_main,
				tabHost.getTabContentView(), true);
		tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("tab1", getResources().getDrawable(R.drawable.ic_launcher))
				.setContent(R.id.view1));
		tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab2")
				.setContent(R.id.view2));
		tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab3")
				.setContent(R.id.view3));
		
		
		 //标签切换事件处理,setOnTabChangedListener
        tabHost.setOnTabChangedListener(new OnTabChangeListener(){  
            @Override
            public void onTabChanged(String tabId) {
            	if (tabId.equals("tab1")) {   //第一个标签
                }
                if (tabId.equals("tab2")) {   //第二个标签
                }
                if (tabId.equals("tab3")) {   //第三个标签
                }
            }            
        }); 
        
    	
	}

}

效果如下:

 TabHost详解_第3张图片

此例源码地址:http://download.csdn.net/detail/harvic880925/6657791   (不要分,仅供分享)

 四:实现微信底部导航栏

效果:

 TabHost详解_第4张图片

参看博客:http://blog.csdn.net/wangkuifeng0118/article/details/7745109

 源码地址:http://download.csdn.net/detail/harvic880925/6657767   (不要分,仅供分享)

 

 请大家尊重作者版权,转载请标明出处:http://blog.csdn.net/harvic880925/article/details/17120325

 

你可能感兴趣的:(5,andriod开发)