androidtabHost布局之一继承TabActivity并以activity布局Word下载.docx
《androidtabHost布局之一继承TabActivity并以activity布局Word下载.docx》由会员分享,可在线阅读,更多相关《androidtabHost布局之一继承TabActivity并以activity布局Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
{
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?
MusicActivity
音乐内容"
17.}
SportActivity.java
SportActivity
运动内容"
ArtistActivity.java
MusicActivity.java
SportActivity.java三个activity是用做标签内容的activity。
即当用户点击相应的标签时,下边会显示相应的activity内容。
ic_tab.xml代码
1.<
?
xml
version="
1.0"
encoding="
utf-8"
>
2.<
selector
3.
xmlns:
android="
4.
5.
<
item
android:
drawable="
@drawable/grey"
state_selected="
true"
7.
/item>
@drawable/black"
11.<
/selector>
这里一定要注意ic_tab.xml文件的位置,是放在res/drawable文件夹下的。
有些朋友说怎么没有这个文件夹啊,实际上大家看到了我将它放在了drawable-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
7.import
android.widget.TabHost;
9./**
*
@author
chenzheng_Java
@description
注意,该类一定要继承TabActivity
*/
13.public
TagView
TabActivity
public
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
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
).setIndicator("
34.
resources.getDrawable(R.drawable.ic_tab)).setContent(intent);
35.
36.
37.
intent2
MusicActivity.class);
38.
music"
音乐标签"
39.
resources.getDrawable(R.drawable.ic_tab)).setContent(intent2);
40.
41.
42.
intent3
SportActivity.class);
43.
sport"
体育标签"
44.
resources.getDrawable(R.drawable.ic_tab)).setContent(intent3);
45.
46.
47.
tabHost.setCurrentTabByTag("
设置第一次打开时默认显示的标签,该参数与tabHost.newTabSpec("
)的参数相同
48.
tabHost.setCurrentTab
(1);
//设置第一次打开时默认显示的标签,参数代表其添加到标签中的顺序,位置是从0开始的哦。
49.
50.
51.}
AndroidManifest.xml
manifest
package="
.tagview"
versionCode="
1"
versionName="
uses-sdk
minSdkVersion="
8"
/>
application
icon="
@drawable/icon"
label="
@string/app_name"
!
--
theme="
@android:
style/Theme.NoTitleBar"
的意思是将系统默认的tag标签去掉,为咱们自己的标签空出位置-->
activity
name="
.TagView"
intent-filter>
action
android.intent.action.MAIN"
category
android.intent.category.LAUNCHER"
/intent-filter>
/activity>
在主配置文件中声明用于标签切换的3个activity,记住此处一定要声明,否则会出错
ArtistActivity"
里面ArtistActivity前面是否有.都可以,你只需要保证该类是在manifest标签下package属性的包中即可。
-->
MusicActivity"
SportActivity"
/application>
27.<
/manifest>
一切都弄好之后,运行,就出现了最终效果。
这里要注意,main.xml是一直都没有用到的哦。
废话连篇:
其实,利用TabHost布局与ListView有很多相似之处,系统也同样为他们提供了帮助类,TabHost-TabActivity
ListView-ListActivity.当我们的activity集成了这些类之后,一般在里面我们只需要整理绑定下数据就可以。
再次声明一下,代码中是存在setContentView方法的调用的,只不过因为我们集成了TabActivity,TabActivity的getTabHost方法中已经进行了实现而已。
对用户隐藏了,并不代表没有。
项目中为了简单易懂,我们只是在每个标签的内容部分添加了一个文本。
实际上,我们完全可以在里面添加图片、视频等等。
只要在相应的activity中实现就行了。
我们可以看到,这种方式其实有很好的分层结构,activity与activity之间没有太多耦合。
可能一直到现在,有些朋友对TabActivity和ListActivity这种实现都特别的别扭。
我这里就简单的说一下,实际上这其实是一种设计模式,模板模式。
系统给你提供了一个实现了大部分内容的模板,然后你通过继承模板,去做修改(例如模板中有一个方法没有任何实现,你重写该方法并对其进行具体实现),让其符合你的要求。
这就是模板模式的原理。
<
activity
android:
.splashScreen"
screenOrientation="
portrait"
intent-filter>
actionandroid:
/>
categoryandroid:
activityandroid:
.EcplanningActivity"
/action>
android.intent.category.DEFAULT"
/category>