自定义TabWidget
扫描二维码
随时随地手机看文章
在开发过程中,默认的TabWidget不能满足我们对于UI的要求并且没有足够的属性工我们去修改,这个时候能够自定义TabWidget是非常必要的。自定义TabWidget组要运用的是TabSpec.setIndicator(View view)方法。
main.xml:
01 |
< TabHost xmlns:android = "http://schemas.android.com/apk/res/android" |
02 |
xmlns:tools = "http://schemas.android.com/tools" |
03 |
android:id = "@android:id/tabhost" |
04 |
android:layout_width = "match_parent" |
05 |
android:layout_height = "match_parent" |
06 |
tools:context = ".Main" > |
07 |
08 |
< RelativeLayout |
09 |
android:layout_width = "match_parent" |
10 |
android:layout_height = "match_parent" > |
11 |
12 |
< TabWidget |
13 |
android:id = "@android:id/tabs" |
14 |
android:layout_width = "match_parent" |
15 |
android:layout_height = "wrap_content" |
16 |
android:layout_alignParentBottom = "true" /> |
17 |
18 |
< FrameLayout |
19 |
android:id = "@android:id/tabcontent" |
20 |
android:layout_width = "match_parent" |
21 |
android:layout_height = "match_parent" > |
22 |
23 |
< LinearLayout |
24 |
android:id = "@+id/tabs1" |
25 |
android:layout_width = "match_parent" |
26 |
android:layout_height = "match_parent" |
27 |
android:orientation = "vertical" > |
28 |
29 |
< TextView |
30 |
android:layout_width = "match_parent" |
31 |
android:layout_height = "wrap_content" |
32 |
android:text = "我是tab1" /> |
33 |
</ LinearLayout > |
34 |
35 |
< LinearLayout |
36 |
android:id = "@+id/tabs2" |
37 |
android:layout_width = "match_parent" |
38 |
android:layout_height = "match_parent" |
39 |
android:orientation = "vertical" > |
40 |
41 |
< TextView |
42 |
android:layout_width = "match_parent" |
43 |
android:layout_height = "wrap_content" |
44 |
android:text = "我是tab2" /> |
45 |
</ LinearLayout > |
46 |
</ FrameLayout > |
47 |
</ RelativeLayout > |
48 |
49 |
</ TabHost > |
供点击时切换的图片tabmini.xml:
1 |
<? xml version = "1.0" encoding = "utf-8" ?> |
2 |
< selector xmlns:android = "http://schemas.android.com/apk/res/android" > |
3 |
4 |
< item android:drawable = "@drawable/check" android:state_selected = "true" /> |
5 |
< item android:drawable = "@drawable/uncheck" android:state_selected = "false" /> |
6 |
7 |
</ selector > |
自定义view的布局文件custom.xml:
01 |
<? xml version = "1.0" encoding = "utf-8" ?> |
02 |
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" |
03 |
android:layout_width = "match_parent" |
04 |
android:layout_height = "wrap_content" |
05 |
android:orientation = "vertical" > |
06 |
07 |
< ImageView |
08 |
android:layout_width = "match_parent" |
09 |
android:layout_height = "wrap_content" |
10 |
android:src = "@drawable/tabmini" /> |
11 |
12 |
< TextView |
13 |
android:id = "@+id/tv" |
14 |
android:layout_width = "match_parent" |
15 |
android:layout_height = "wrap_content" |
16 |
android:layout_marginBottom = "0sp" |
17 |
android:gravity = "center_horizontal" /> |
18 |
19 |
</ LinearLayout > |
最后是我们的main.java:
01 |
package com.app.main; |
02 |
03 |
import android.app.Activity; |
04 |
import android.os.Bundle; |
05 |
import android.view.View; |
06 |
import android.widget.TabHost; |
07 |
import android.widget.TabHost.TabSpec; |
08 |
import android.widget.TextView; |
09 |
10 |
public class Main extends Activity { |
11 |
12 |
@Override |
13 |
protected void onCreate(Bundle savedInstanceState) { |
14 |
super .onCreate(savedInstanceState); |
15 |
setContentView(R.layout.main); |
16 |
17 |
TabHost tabHost = (TabHost) this .findViewById(android.R.id.tabhost); |
18 |
19 |
// tabhost如果是以findViewById()这个方法获取的,必须调用setup()方法 |
20 |
tabHost.setup(); |
21 |
22 |
View view1 = this .getLayoutInflater().inflate(R.layout.custom, null ); |
23 |
24 |
TextView tv1 = (TextView) view1.findViewById(R.id.tv); |
25 |
26 |
tv1.setText( "tab1" ); |
27 |
28 |
View view2 = this .getLayoutInflater().inflate(R.layout.custom, null ); |
29 |
30 |
TextView tv2 = (TextView) view2.findViewById(R.id.tv); |
31 |
32 |
tv2.setText( "tab2" ); |
33 |
34 |
TabSpec spec1 = tabHost.newTabSpec( "tab1" ).setIndicator(view1) |
35 |
.setContent(R.id.tabs1); |
36 |
37 |
TabSpec spec2 = tabHost.newTabSpec( "tab2" ).setIndicator(view2) |
38 |
.setContent(R.id.tabs2); |
39 |
40 |
tabHost.addTab(spec1); |
41 |
42 |
tabHost.addTab(spec2); |
43 |
44 |
} |
45 |
46 |
} |
实现的效果: