1、8. 9. Override10. protectedvoidonCreate(BundlesavedInstanceState)11. super.onCreate(savedInstanceState);12. TextViewtextView=newTextView(this);13. /该文档将会作为标签的内容进行显示 14. textView.setText(艺术内容);15. setContentView(textView);16. 17. 18. MusicActivity.javaview plaincopy to clipboardprint?MusicActivity音乐内
2、容17. SportActivity.javaSportActivity运动内容ArtistActivity.java MusicActivity.java SportActivity.java三个activity是用做标签内容的activity。即当用户点击相应的标签时,下边会显示相应的activity内容。ic_tab.xml代码1. 2. selector3. xmlns:android=4. 5. drawable/black11. 这里一定要注意ic_tab.xml文件的位置,是放在res/drawable文件夹下的。有些朋友说怎么没有这个文件夹啊,实际上大家看到了我将它放在了dra
3、wable-hdpi中了,实际上drawable-hdpi、drawable-ldpi、drawable-mdpi三个文件夹都属于drawable文件夹的哦。该文件它规定了,当标签获得焦点和失去焦点时,标签上显示什么图片。例如本例中,就是当state_selected=(当标签被选中时),显示drawable/grey指定的资源图片。当未被选中时,显示drawable/black指定的资源图片。tagView.java代码:android.app.TabActivity;android.content.Intent;android.content.res.Resources;6. import
4、7. importandroid.widget.TabHost;9. /*authorchenzheng_Javadescription注意,该类一定要继承TabActivity*/13. publicTagViewTabActivitypublicsetContentView(R.layout.main); 18. android代码中访问application资源的一个类 19. ResourcesresourcesgetResources();20. 获取当前activity的标签,该方法的实现中已经执行了setContentView(com.android.internal.R.lay
5、out.tab_content);21. TabHosttabHostgetTabHost();22. 每一个标签项 23. TabHost.TabSpecspec;24. 25. 声明一个意图,该意图告诉我们,下一个跳转到的activity是ArtistActivity。26. IntentintentIntent(this,ArtistActivity.class);27. /*28. tabHost.newTabSpec(artist)创建一个标签项,其中artist为它的标签标识符,相当于jsp页面标签的name属性29. setIndicator(艺术标签,resources.get
6、Drawable(R.drawable.ic_tab)设置标签显示文本以及标签上的图标(该图标并不是一个图片,而是一个xml文件哦)30. setContent(intent)为当前标签指定一个意图31. tabHost.addTab(spec);将标签项添加到标签中32. 33. spec).setIndicator(,34. resources.getDrawable(R.drawable.ic_tab).setContent(intent);35. 36. 37. intent2MusicActivity.class);38. music音乐标签39. resources.getDraw
7、able(R.drawable.ic_tab).setContent(intent2);40. 41. 42. intent3SportActivity.class);43. sport体育标签44. resources.getDrawable(R.drawable.ic_tab).setContent(intent3);45. 46. 47. tabHost.setCurrentTabByTag(设置第一次打开时默认显示的标签,该参数与tabHost.newTabSpec()的参数相同 48. tabHost.setCurrentTab(1);/设置第一次打开时默认显示的标签,参数代表其添加
8、到标签中的顺序,位置是从0开始的哦。49. 50. 51. AndroidManifest.xmlmanifestpackage=.tagviewversionCode=1versionName=uses-sdkminSdkVersion=8/applicationicon=drawable/iconlabel=string/app_name!-theme=android:style/Theme.NoTitleBar的意思是将系统默认的tag标签去掉,为咱们自己的标签空出位置-activityname=.TagViewintent-filteractionandroid.intent.acti
9、on.MAINcategoryandroid.intent.category.LAUNCHER/intent-filter/activity在主配置文件中声明用于标签切换的3个activity,记住此处一定要声明,否则会出错ArtistActivity里面ArtistActivity前面是否有.都可以,你只需要保证该类是在manifest标签下package属性的包中即可。-MusicActivitySportActivity/application27. 一切都弄好之后,运行,就出现了最终效果。这里要注意,main.xml是一直都没有用到的哦。废话连篇: 其实,利用TabHost布局与Lis
10、tView有很多相似之处,系统也同样为他们提供了帮助类,TabHost-TabActivity ListView-ListActivity .当我们的activity集成了这些类之后,一般在里面我们只需要整理绑定下数据就可以。 再次声明一下,代码中是存在setContentView方法的调用的,只不过因为我们集成了TabActivity,TabActivity的getTabHost方法中已经进行了实现而已。对用户隐藏了,并不代表没有。 项目中为了简单易懂,我们只是在每个标签的内容部分添加了一个文本。实际上,我们完全可以在里面添加图片、视频等等。只要在相应的activity中实现就行了。我们可以
11、看到,这种方式其实有很好的分层结构,activity与activity之间没有太多耦合。 可能一直到现在,有些朋友对TabActivity和ListActivity这种实现都特别的别扭。我这里就简单的说一下,实际上这其实是一种设计模式,模板模式。系统给你提供了一个实现了大部分内容的模板,然后你通过继承模板,去做修改(例如模板中有一个方法没有任何实现,你重写该方法并对其进行具体实现),让其符合你的要求。这就是模板模式的原理。 action android: /category android:activity android:.EcplanningActivity/actionandroid.intent.category.DEFAULT/category
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1