标签显示界面的主要特点是可以在一个窗口中显示多组标签栏的类容。
在Android系统中,每个标签栏称为一个Tab,而包含多个标签栏的内容就称为TabHost。
通过TabHost的继承结构来看,TabHost类是FrameLayout的子类。
实现标签显示界面有两种方式可供选择。
- 直接让一个Activity继承TabActivity类。
- 利用findViewById()方法取得TabHost组件,并进行一些配置。
下面我们用两个简单例子来体验一下:
第一种继承TabActivity类:(注意:TabActivity类已被官方提出抛弃)
首先就是布局文件tab.xml:
1 27 13 2519 24 31 3635 42 5647 51 54 55
其次就是默认的MainActivity的实现:
1 public class MyTabHostDemo extends TabActivity { // 继承了TabActivity 2 private TabHost myTabHost; 3 private int[] layRes = new int[] { R.id.tab_edit, R.id.tab_clock, 4 R.id.tab_sex }; // 这些是内嵌布局文件的ID 5 6 @Override 7 public void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 this.myTabHost = super.getTabHost(); // 取得TabHost对象10 LayoutInflater.from(this).inflate(R.layout.tab,11 this.myTabHost.getTabContentView(), true); // true表示实例化布局文件中的组件12 for (int x = 0; x < this.layRes.length; x++) {13 TabSpec myTab = this.myTabHost.newTabSpec("tab" + x) ;14 myTab.setIndicator("标签 - " + x) ;15 myTab.setContent(this.layRes[x]) ;16 this.myTabHost.addTab(myTab) ;17 }18 }19 }
到此,一个简单的TabHost的使用就完成了。
第二种方式的实现:
首先,我们还是是布局文件的实现。
tab.xml:
1 28 9 13 14 17 18 23 24 28 29 33 34 39 40 41 42 46 47 52 53 54 55 59 60 65 66 67 68 69 70 71
main.xml:(这个不是默认.JAVA文件加载的布局文件,只是为了方便没有新建布局文件。)
1 26 11 12
实现默认的MainActivity:
1 public class MainActivity extends ActivityGroup { //ActivityGroup类也已被建议遗弃 2 private TabHost tabHost; 3 Intent oneIntent; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.tab); 9 oneIntent = new Intent();10 oneIntent.setClass(this, testActivity.class);11 tabHost = (TabHost) this.findViewById(R.id.TabHost01);//获得对象12 tabHost.setup();//建立对象(与上一行代码必须同时存在)13 tabHost.setup(this.getLocalActivityManager());//要实现Intent跳转,必须要这句话。14 try {15 16 tabHost.addTab(tabHost17 .newTabSpec("tab_1")18 .setContent(R.id.LinearLayout1)19 .setIndicator("TAB1",20 this.getResources().getDrawable(R.drawable.img1)));21 tabHost.addTab(tabHost22 .newTabSpec("tab_2")23 .setContent(R.id.LinearLayout2)24 .setIndicator("TAB2",25 this.getResources().getDrawable(R.drawable.img2)));26 tabHost.addTab(tabHost.newTabSpec("tab_3")27 .setContent(R.id.LinearLayout3).setIndicator("TAB3"));28 tabHost.addTab(tabHost29 .newTabSpec("tab_4")30 .setIndicator("TAB4",31 this.getResources().getDrawable(R.drawable.img3))32 .setContent(oneIntent));33 tabHost.setCurrentTab(1); // 设置默认的页面34 } catch (Exception ex) {35 ex.printStackTrace();36 Log.d("EXCEPTION", ex.getMessage());37 }38 }39 40 }
新建一个用于Intent跳转的Activity:
1 public class testActivity extends Activity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 // TODO Auto-generated method stub 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.main); 8 TextView tv=(TextView) findViewById(R.id.TV); 9 tv.setText("已经跳转了");10 }11 12 }
接下来运行即可。
这样,用两个例子分别实现了两种不同的实现方式。