修改TabHost默认样式

TabHost是Android提供的一个容器组件,利用它可以轻松地实现TAB界面,如下图所示:

但很多时候,默认的TAB样式并不符合软件的整体风格,这时候该怎么办呢?其实,我们可以编写XML对其样式进行修改。下面修改后的效果图:

1. TabHost布局文件 main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
	<TabHost


	    android:id
="@+id/tabhost"
  

	    android:layout_width
="fill_parent"


	    android:layout_height
="fill_parent"
>

  
	    <LinearLayout
  

	        android:orientation
="vertical"


	        android:layout_width
="fill_parent"
  

	        android:layout_height
="fill_parent"
>

  
	        <TabWidget
  

	            android:id
="@android:id/tabs"


	            android:layout_width
="fill_parent"
 

	            android:layout_height
="30dip"


	            android:background
="#a0a0a0"


	            android:layout_weight
="0"
 />

  
	        <FrameLayout
  

	            android:id
="@android:id/tabcontent"
  

	            android:layout_width
="fill_parent"
  

	            android:layout_height
="fill_parent"


	            android:layout_weight
="1"
>


				  <ListView
 

				    android:id
="@+id/user_list"


				    android:layout_width
="fill_parent"


				    android:layout_height
="fill_parent"
 

				    android:divider
="@drawable/divider_line"


				    android:cacheColorHint
="#00000000"
 />


				  <ListView
 

				    android:id
="@+id/article_list"


				    android:layout_width
="fill_parent"


				    android:layout_height
="fill_parent"
 

				    android:divider
="@drawable/divider_line"


				    android:cacheColorHint
="#00000000"
 />

  
				  <ListView
 

				    android:id
="@+id/feed_list"


				    android:layout_width
="fill_parent"


				    android:layout_height
="fill_parent"
 

				    android:divider
="@drawable/divider_line"


				    android:cacheColorHint
="#00000000"
 />

  
				  <ListView
 

				    android:id
="@+id/book_list"


				    android:layout_width
="fill_parent"


				    android:layout_height
="fill_parent"
 

				    android:divider
="@drawable/divider_line"


				    android:cacheColorHint
="#00000000"
 />

  				    				    				      
	        </FrameLayout>


  
	    </LinearLayout>


  
	</TabHost>


FrameLayout里有四个ListView 分别对应用户、文章、频道、图书。
TabWidget和FrameLayout的ID不能自己定义修改。

2. Activity后台代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
RelativeLayout articleTab =
 (
RelativeLayout)
 LayoutInflater.from
(
this
)
.inflate
(
R.layout
.minitab
, null
)
;

TextView articleTabLabel =
 (
TextView)
 articleTab.findViewById
(
R.id
.tab_label
)
;

articleTabLabel.setText
(
"文章"
)
;

 
RelativeLayout feedTab =
 (
RelativeLayout)
 LayoutInflater.from
(
this
)
.inflate
(
R.layout
.minitab
, null
)
;

TextView feedTabLabel =
 (
TextView)
 feedTab.findViewById
(
R.id
.tab_label
)
;

feedTabLabel.setText
(
"频道"
)
;

 
RelativeLayout bookTab =
 (
RelativeLayout)
 LayoutInflater.from
(
this
)
.inflate
(
R.layout
.minitab
, null
)
;

TextView bookTabLabel =
 (
TextView)
 bookTab.findViewById
(
R.id
.tab_label
)
;

bookTabLabel.setText
(
"图书"
)
;

 
TabHost tabHost =
 (
TabHost)
 findViewById(
R.id
.tabhost
)
;

tabHost.setup
(
)
;

 
tabHost.addTab
(
tabHost.newTabSpec
(
"user"
)
.setIndicator
(
userTab)
.setContent
(
R.id
.user_list
)
)
;

tabHost.addTab
(
tabHost.newTabSpec
(
"article"
)
.setIndicator
(
articleTab)
.setContent
(
R.id
.article_list
)
)
;

tabHost.addTab
(
tabHost.newTabSpec
(
"feed"
)
.setIndicator
(
feedTab)
.setContent
(
R.id
.feed_list
)
)
;

tabHost.addTab
(
tabHost.newTabSpec
(
"book"
)
.setIndicator
(
bookTab)
.setContent
(
R.id
.book_list
)
)
;

TabHost创建出来以后,必须先setup一下,tabHost.setup();
setIndicator方法设置的View其实就对应了TAB中的一个个选项卡,它们都是通过一个叫minitab的布局文件inflate出来的。

3. 选项卡布局文件minitab.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml
 version
="1.0"
 encoding
="utf-8"
?>


<RelativeLayout
 xmlns:android
="http://schemas.android.com/apk/res/android"
  

    android:layout_width
="fill_parent"


    android:layout_height
="fill_parent"


    android:paddingLeft
="5dip"


    android:paddingRight
="5dip"
>

  
 
    <TextView
 android:id
="@+id/tab_label"
  

        android:layout_width
="fill_parent"


        android:layout_height
="fill_parent"


        android:gravity
="center"


        android:textColor
="#000000"


        android:textStyle
="bold"


        android:background
="@drawable/minitab"
 />

 
</RelativeLayout>


drawable/minitab是一个selector,指定了Tab选项卡的背景颜色。

4. selector文件 minitab.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml
 version
="1.0"
 encoding
="utf-8"
?>


<selector


	xmlns:android
="http://schemas.android.com/apk/res/android"


	>


	<item


		android:state_selected
="false"


		android:drawable
="@drawable/minitab_unselected"


		>


	</item>



	<item


		android:state_selected
="true"


		android:drawable
="@drawable/minitab_default"


		>


	</item>



</selector>


minitab_unselected是一浅蓝色背景图片
minitab_default是一白色背景图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值