androidtabHost布局之一继承TabActivity并以activity布局.docx
- 文档编号:6867838
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:11
- 大小:205.72KB
androidtabHost布局之一继承TabActivity并以activity布局.docx
《androidtabHost布局之一继承TabActivity并以activity布局.docx》由会员分享,可在线阅读,更多相关《androidtabHost布局之一继承TabActivity并以activity布局.docx(11页珍藏版)》请在冰豆网上搜索。
androidtabHost布局之一继承TabActivity并以activity布局
androidtabHost布局之一继承TabActivity并以activity布局
分类:
android_布局2011-02-2511:
581333人阅读评论
(1)收藏举报
先查看下最终效果图:
再看下代码结构:
其中black.gif顾名思义就是一个黑背景图片,grey.gif就是一张灰色的背景图片
然后直接上代码:
ArtistActivity.java
+expandsourceviewplaincopytoclipboardprint?
1.package .tagview;
2.
3.import android.app.Activity;
4.import android.os.Bundle;
5.import android.widget.TextView;
6.
7.public class ArtistActivity extends Activity {
8.
9. @Override
10. protected void onCreate(Bundle savedInstanceState) {
11. super.onCreate(savedInstanceState);
12. TextView textView = new TextView(this);
13. // 该文档将会作为标签的内容进行显示
14. textView.setText("艺术内容");
15. setContentView(textView);
16.
17. }
18.}
MusicActivity.java
viewplaincopytoclipboardprint?
1.package .tagview;
2.
3.import android.app.Activity;
4.import android.os.Bundle;
5.import android.widget.TextView;
6.
7.public class MusicActivity extends Activity {
8.
9. @Override
10. protected void onCreate(Bundle savedInstanceState) {
11. super.onCreate(savedInstanceState);
12. TextView textView = new TextView(this);
13. // 该文档将会作为标签的内容进行显示
14. textView.setText("音乐内容");
15. setContentView(textView);
16. }
17.}
SportActivity.java
+expandsourceviewplaincopytoclipboardprint?
1.package .tagview;
2.
3.import android.app.Activity;
4.import android.os.Bundle;
5.import android.widget.TextView;
6.
7.public class SportActivity extends Activity {
8.
9. @Override
10. protected void onCreate(Bundle savedInstanceState) {
11. super.onCreate(savedInstanceState);
12. TextView textView = new TextView(this);
13. // 该文档将会作为标签的内容进行显示
14. textView.setText("运动内容");
15. setContentView(textView);
16.
17. }
18.}
ArtistActivity.java MusicActivity.java SportActivity.java三个activity是用做标签内容的activity。
即当用户点击相应的标签时,下边会显示相应的activity内容。
ic_tab.xml代码
+expandsourceviewplaincopytoclipboardprint?
1.
xml version="1.0" encoding="utf-8"?
>
2. 3. xmlns: android=" 4. > 5. drawable="@drawable/grey" 6. android: state_selected="true" 7. > 8. drawable="@drawable/black" 9. 10. > 11.
这里一定要注意ic_tab.xml文件的位置,是放在res/drawable文件夹下的。
有些朋友说怎么没有这个文件夹啊,实际上大家看到了我将它放在了drawable-hdpi中了,实际上drawable-hdpi、drawable-ldpi、drawable-mdpi三个文件夹都属于drawable文件夹的哦。
该文件它规定了,当标签获得焦点和失去焦点时,标签上显示什么图片。
例如本例中,就是当state_selected="true"(当标签被选中时),显示@drawable/grey指定的资源图片。
当未被选中时,显示@drawable/black指定的资源图片。
tagView.java代码:
viewplaincopytoclipboardprint?
1.package .tagview;
2.
3.import android.app.TabActivity;
4.import android.content.Intent;
5.import android.content.res.Resources;
6.import android.os.Bundle;
7.import android.widget.TabHost;
8.
9./**
10. * @author chenzheng_Java
11. * @description 注意,该类一定要继承TabActivity
12. */
13.public class TagView extends TabActivity {
14. @Override
15. public void onCreate(Bundle savedInstanceState) {
16. super.onCreate(savedInstanceState);
17. // setContentView(R.layout.main);
18. // android代码中访问application资源的一个类
19. Resources resources = getResources();
20. // 获取当前activity的标签,该方法的实现中已经执行了setContentView(com.android.internal.R.layout.tab_content);
21. TabHost tabHost = getTabHost();
22. // 每一个标签项
23. TabHost.TabSpec spec;
24.
25. // 声明一个意图,该意图告诉我们,下一个跳转到的activity是ArtistActivity。
26. Intent intent = new Intent(this, ArtistActivity.class);
27. /**
28. * tabHost.newTabSpec("artist")创建一个标签项,其中artist为它的标签标识符,相当于jsp页面标签的name属性
29. * setIndicator("艺术标签",resources.getDrawable(R.drawable.ic_tab))设置标签显示文本以及标签上的图标(该图标并不是一个图片,而是一个xml文件哦)
30. * setContent(intent)为当前标签指定一个意图
31. * tabHost.addTab(spec); 将标签项添加到标签中
32. */
33. spec = tabHost.newTabSpec("artist").setIndicator("艺术标签",
34. resources.getDrawable(R.drawable.ic_tab)).setContent(intent);
35. tabHost.addTab(spec);
36.
37. Intent intent2 = new Intent(this, MusicActivity.class);
38. spec = tabHost.newTabSpec("music").setIndicator("音乐标签",
39. resources.getDrawable(R.drawable.ic_tab)).setContent(intent2);
40. tabHost.addTab(spec);
41.
42. Intent intent3 = new Intent(this, SportActivity.class);
43. spec = tabHost.newTabSpec("sport").setIndicator("体育标签",
44. resources.getDrawable(R.drawable.ic_tab)).setContent(intent3);
45. tabHost.addTab(spec);
46.
47. // tabHost.setCurrentTabByTag("music");设置第一次打开时默认显示的标签,该参数与tabHost.newTabSpec("music")的参数相同
48. tabHost.setCurrentTab
(1);//设置第一次打开时默认显示的标签,参数代表其添加到标签中的顺序,位置是从0开始的哦。
49.
50. }
51.}
AndroidManifest.xml
+expandsourceviewplaincopytoclipboardprint?
1.
xml version="1.0" encoding="utf-8"?
>
2. android=" 3. package=".tagview" 4. android: versionCode="1" 5. android: versionName="1.0"> 6. minSdkVersion="8" /> 7. 8. icon="@drawable/icon" android: label="@string/app_name"> 9. -- android: theme="@android: style/Theme.NoTitleBar" 的意思是将系统默认的tag标签去掉,为咱们自己的标签空出位置--> 10. name=".TagView" 11. android: label="@string/app_name" 12. android: theme="@android: style/Theme.NoTitleBar" 13. > 14. 15. name="android.intent.action.MAIN" /> 16. name="android.intent.category.LAUNCHER" /> 17. 18. 19. -- 在主配置文件中声明用于标签切换的3个activity,记住此处一定要声明,否则会出错 20. android: name="ArtistActivity"里面ArtistActivity前面是否有.都可以,你只需要保证该类是在manifest标签下package属性的包中即可。 21. --> 22. name="ArtistActivity" android: label="@string/app_name"> 23. name="MusicActivity" android: label="@string/app_name"> 24. name="SportActivity" android: label="@string/app_name"> 25. 26. 27.
一切都弄好之后,运行,就出现了最终效果。
这里要注意,main.xml是一直都没有用到的哦。
废话连篇:
其实,利用TabHost布局与ListView有很多相似之处,系统也同样为他们提供了帮助类,TabHost-TabActivity ListView-ListActivity.当我们的activity集成了这些类之后,一般在里面我们只需要整理绑定下数据就可以。
再次声明一下,代码中是存在setContentView方法的调用的,只不过因为我们集成了TabActivity,TabActivity的getTabHost方法中已经进行了实现而已。
对用户隐藏了,并不代表没有。
项目中为了简单易懂,我们只是在每个标签的内容部分添加了一个文本。
实际上,我们完全可以在里面添加图片、视频等等。
只要在相应的activity中实现就行了。
我们可以看到,这种方式其实有很好的分层结构,activity与activity之间没有太多耦合。
可能一直到现在,有些朋友对TabActivity和ListActivity这种实现都特别的别扭。
我这里就简单的说一下,实际上这其实是一种设计模式,模板模式。
系统给你提供了一个实现了大部分内容的模板,然后你通过继承模板,去做修改(例如模板中有一个方法没有任何实现,你重写该方法并对其进行具体实现),让其符合你的要求。
这就是模板模式的原理。
android: label="@string/app_name" android: name=".splashScreen" android: screenOrientation="portrait" android: theme="@android: style/Theme.NoTitleBar"> name="android.intent.action.MAIN"/> name="android.intent.category.LAUNCHER"/>
name=".EcplanningActivity"> name="android.intent.action.MAIN"> name="android.intent.category.DEFAULT">
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- androidtabHost 布局 之一 继承 TabActivity activity