Android TabHost的使用

来源:互联网 发布:linux while 死循环 编辑:程序博客网 时间:2024/05/21 18:39



您的评价:
     
 收藏该经验    
1. 最简单的TabHost,Tab来自于layout下的元素  (只从1个Layout中取数据)

(1)效果图

Android TabHost的使用

(2)代码

1)tab_demo.xml

查看源码
打印?
01<?xmlversion="1.0"encoding="utf-8"?> 
02<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
03    android:orientation="vertical" 
04    android:layout_width="fill_parent" 
05    android:layout_height="fill_parent" 
06    
07    <TextViewandroid:id="@+id/tab_demo_tv1" 
08        android:layout_width="fill_parent"  
09        android:layout_height="fill_parent"  
10        android:text="tab_demo_tv1" 
11    /> 
12    <TextViewandroid:id="@+id/tab_demo_tv2" 
13        android:layout_width="fill_parent"  
14        android:layout_height="fill_parent"  
15        android:text="tab_demo_tv2" 
16    /> 
17    <TextViewandroid:id="@+id/tab_demo_tv3" 
18        android:layout_width="fill_parent"  
19        android:layout_height="fill_parent"  
20        android:text="tab_demo_tv3" 
21    /> 
22</FrameLayout>

2)TabDemo.java

查看源码
打印?
01public class TabDemo extendsTabActivity { 
02    privateTabHost tabHost; 
03       
04    publicvoid onCreate(Bundle savedInstanceState) { 
05        super.onCreate(savedInstanceState); 
06        tabHost = getTabHost(); 
07           
08        LayoutInflater.from(this).inflate(R.layout.tab_demo, tabHost.getTabContentView(),true); 
09        tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("Tab1",null).setContent(R.id.tab_demo_tv1));
10        tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("Tab2",null).setContent(R.id.tab_demo_tv2));
11        tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("Tab3",null).setContent(R.id.tab_demo_tv3));
12           
13        setContentView(tabHost); 
14    
15}

2. TabHost绑定动态View(从2个Layout中取数据)

(1)效果图

Android TabHost的使用

(2)代码

1)tab_map.xml

查看源码
打印?
1<?xmlversion="1.0"encoding="utf-8"?> 
2<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
3    android:orientation="vertical" 
4    android:layout_width="fill_parent" 
5    android:layout_height="fill_parent" 
6    android:id="@+id/tab_map_id" 
7    
8</FrameLayout>

 2)tab_hs.xml

查看源码
打印?
01<?xmlversion="1.0"encoding="utf-8"?> 
02<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
03    android:orientation="vertical" 
04    android:layout_width="fill_parent" 
05    android:layout_height="fill_parent" 
06    android:id="@+id/tab_hs_id" 
07    
08    <TextViewandroid:id="@+id/tab_hs_tv" 
09        android:layout_width="fill_parent" 
10        android:layout_height="fill_parent" 
11    /> 
12</FrameLayout>

3)MapView.java

查看源码
打印?
1public class MapView extendsView { 
2    publicMapView(Context context) { 
3        super(context); 
4    
5    protectedvoid onDraw(Canvas canvas) { 
6        Paint p =new Paint(); 
7        canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.icon),0, 0, p);
8    
9}

4)TabDemo.java

查看源码
打印?
01public class TabDemo extendsTabActivity { 
02    privateTabHost tabHost; 
03       
04    publicvoid onCreate(Bundle savedInstanceState) { 
05        super.onCreate(savedInstanceState); 
06        tabHost = getTabHost(); 
07           
08        createTabSpec_map(); 
09        createTabSpec_hs(); 
10           
11        setContentView(tabHost); 
12    
13       
14    privatevoid createTabSpec_map() { 
15        LayoutInflater inflater_tab1 = LayoutInflater.from(this); 
16        inflater_tab1.inflate(R.layout.tab_map, tabHost.getTabContentView()); 
17           
18        /*
19         * R.layout.tab_demo已被LayoutInflater注册,所以这个可以通过findViewById获得其对象
20         */ 
21        FrameLayout frameLayout = (FrameLayout) findViewById(R.id.tab_map_id); 
22        MapView mv = new MapView(this); 
23        frameLayout.addView(mv); 
24           
25        TabHost.TabSpec tabSpec_map = tabHost.newTabSpec("map view"); 
26        tabSpec_map.setIndicator("map view", null); 
27        tabSpec_map.setContent(R.id.tab_map_id); // 动态绑定基于图片的View(通过一个Layout绑定) 
28        tabHost.addTab(tabSpec_map); 
29    
30    private void createTabSpec_hs() { 
31        LayoutInflater inflater_tab2 = LayoutInflater.from(this); 
32        inflater_tab2.inflate(R.layout.tab_hs, tabHost.getTabContentView()); 
33           
34        TabHost.TabSpec tabSpec_hs = tabHost.newTabSpec("hs view"); 
35        tabSpec_hs.setIndicator("hs view"); 
36        tabSpec_hs.setContent(R.id.tab_hs_id); // 绑定一个新的Layout 
37        tabHost.addTab(tabSpec_hs); 
38           
39        /*
40         * 这个绑定View的操作必须要重新使用一个新方法来完成,因为Tab的生成是在onCreate()中完成的,onCreate()只被调用一次,
41         * 但是数据更新操作是需要反复进行的,如果反复调用createTabSpec_hs()则会生成多个tab页,这是我们不希望的,所以单独把
42         * updata分离出来,数据更新时单独调用此方法就可以了。
43         */ 
44        updateTabSpec_hs(); 
45    
46    privatevoid updateTabSpec_hs() { 
47        TextView tv = (TextView) findViewById(R.id.tab_hs_tv); 
48        tv.setText("This is tab2"); 
49    
50}
0 0