浪曦网-国内顶级 IT视频网络编程教育平台 Www.LangSin.Com
浪曦网-国内顶级 IT视频网络编程教育平台 Www.LangSin.Com 页 1
安卓程序开发之 TabHost使用小结
使用 TabHost 可以在一个屏幕间进行不同版面的切换,例如 android自带的拨号应用。
完成一个 TabHost的步骤:
一、
布局文件,Tabhost布局文件一般使用 FrameLayout,在 FrameLayout中添加
每个 Tab页面的视图,但必须要有 id,例如:
9 q" q, q, F8 Y- W( G
9 @! r8 |% a% Q+ {( d9 O
$ r1 m! v( Y, G0 _/ y D( m% [
0 T& Y6 l& t' W' O d2 o
1 w% }6 F- N# Z, D
: J: H$ x0 \. H8 q( u1 x
, }( V$ A o$ k2 y3 h: }- U: H
: R1 X" J' b' m2 \0 X; C* i5 A
) g6 [+ U) ]5 T, a
0 d* H+ r* O; |$ o2 t& F* C
8 Q5 Z% p$ ^* X& O9 h) K" h0 V. E
9 I& i S5 c/ ? O8 [. d! \
~' H& {0 Y6 z2 b* c
注意:每个 Tab页面都要有自己的 layout,负责在代码中通过 Id无法找到相对应的视图 . ^ +
p- K! c8 ?+ a
浪曦网-国内顶级 IT视频网络编程教育平台 Www.LangSin.Com
浪曦网-国内顶级 IT视频网络编程教育平台 Www.LangSin.Com 页 2
二、创建展示 TabHost的 Activity。
1、我们可以直接继承 TabActivity,再通过 getTabHost()方法得到 TabHost对象。
例如: 9 @: r3 O) h' [/ J
protected void onCreate(Bundle savedInstanceState) - d$ s; ^# a: l* s
{ , `4 q' r+ N1 e
super.onCreate(savedInstanceState);
myTabHost = this.getTabHost(); , D5 N$ A0 G3 V* |; n5 t
//绑定布局文件
LayoutInflater.from(this).inflate(R.layout.tab_host, $ x3 d" U# ]3 W6 l% f9 [
myTabHost.getTabContentView(),
true); ; d0 G4 Y4 H* V7 F& H7 P- @
initTabHost();
setTitle(weather.getCityName());
//设定显示内容
setContentView(myTabHost);
}
3 ~$ Z* F; q3 ^9 q* t) m$ R' k/ m
2,为 TabHost添加要显示的 tab,一个 tab就是相应的一个选项卡。例如: 5 W1 i f& @( J! t6 O! G
//添加 tab + E$ s( f; T% N
myTabHost.addTab(myTabHost.newTabSpec(TAB_1) //tab的 Tag
.setIndicator("城市天气") //tab的标题 5 M5 `) }4 O# x: [! _
.setContent(R.id.tab01)); //tab的显示内容
myTabHost.addTab(myTabHost.newTabSpec(TAB_2)
.setIndicator("天气详情")
.setContent(R.id.tab02)); 2 l, j4 r0 s8 G$ [9 [' e8 b. l
myTabHost.addTab(myTabHost.newTabSpec(TAB_3) c' N6 L- y' _
.setIndicator("城市介绍") - V6 ^ o- k* T0 t' [6 s$ E
.setContent(R.id.tab03)); # }' J: |' T# P: L
3,为 Tabhost添加选项卡改变监听,在选项卡改变时做相应处理。例如: , U$ r6 K( m. U% O! g% S* T" g
//添加 OnTabChangedListener监听,此监听为选项卡改变监听 ; M( Q; f# V c
myTabHost.setOnTabChangedListener(this);
监听处理方法 \8 {' I( o! W* C0 ?3 D! T0 P
public void onTabChanged(String tabId) " a6 [; \/ {+ J+ i
{
if (tabId.equals(TAB_1))
{ 5 \8 O) v' n) G7 w/ ^
//初始化标签 1
initTab1();
} ( I9 G& C& a8 { d( j" n0 x
else if (tabId.equals(TAB_2)) 0 b$ }/ }2 I) `4 V
{ 4 l, H p, y" C* H* k) T
//初始化标签 2 ' D8 L: x \& [/ q! g, R
initTab2();
浪曦网-国内顶级 IT视频网络编程教育平台 Www.LangSin.Com
浪曦网-国内顶级 IT视频网络编程教育平台 Www.LangSin.Com 页 3
}
else if (tabId.equals(TAB_3))
{
//初始化标签 3
initTab3(); 6 _: y* p& i% m; f V" C5 y
} : n4 S3 H4 ?$ c8 W. i+ U
( N7 `3 C* C2 L3 c
} - X7 h M3 P1 n: {9 ~
4,修改 Tab显示内容
private void initTab2() 8 C' w) Y6 A4 n
{
//得到 tab内容的视图 2 `9 c+ N' t/ U5 Q) `. A0 a& j
TextView weathDetailText =
(TextView)findViewById(R.id.weath_detail);
weathDetailText.setText(weather.getLiveWeather()); 6 T7 u5 Z; y& J' D, m; H3 D) v
}