RelativeLayout 的使用实例 类似自定义TabHost

系统 1745 0
<!-- end header -->

2011年08月12日

RelativeLayout 的使用实例 类似自定义TabHost效果

Filed under: Android开发 — 标签: RelativeLayout , TabHost , 自定义 — admin @ 17:27
<script type="text/javascript">&lt;!-- google_ad_client = &quot;pub-1116984446973318&quot;; google_ad_slot = &quot;3592517579&quot;; google_ad_width = 728; google_ad_height = 90; //--&gt; </script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>

TabHost如果要自定义显示的效果,有点麻烦,而默认的样式有时候又与我们程序的风格不匹配.今天我们就用RelativeLayout来 实现与TabHost相同的功能.上效果图:
RelativeLayout 的使用实例 类似自定义TabHost效果《》
点击上面的tab,tab自身样式会改变,下面内容也会改变,功能完全与TabHost相同.
介绍一下RelativeLayout,RelativeLayout是相对布局,顾名思义,就是说里面的控件位置都是相对其他控件的位置而确定的.如上 面的效果,Tab相对于屏幕顶部对齐,底部按钮相对于屏幕底部对齐.而内容则放在顶部的Tab和底部的按钮中间.
所以所有被其他控件依赖定位的控件,必须先写,也就是说,要实现上面的效果,XML中不是从上往下写,而是先定上和下,再写中间,因为中间的内容高度,位 置都依赖于它的上下控件.
实现TabHost效果的原理也简单,点击tab时设置被点击和没被点击的的tab的背景,字体颜色即可显示点击效果.在点击事件中,用View的 removeAllViews()方法清除中间控件的所有内容,再用addView方法添加需要的内容.
下面上代码,布局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
47
48
49
50

                  
                    
                      
                        <?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:weightSum
                      
                      


=
                      
                        "1"
                      
                      
                        android:background
                      
                      


=
                      
                        "@color/white"
                      
                      
                        >
                      
                    
                    
                      
                        <LinearLayout
                      
                      
                        android:id
                      
                      


=
                      
                        "@+id/topmenu"
                      
                    
                    
                      
                        android:orientation
                      
                      


=
                      
                        "horizontal"
                      
                      
                        android:layout_alignParentTop
                      
                      


=
                      
                        "true"
                      
                    
                    
                      
                        android:layout_width
                      
                      


=
                      
                        "fill_parent"
                      
                      
                        android:layout_height
                      
                      


=
                      
                        "40dip"
                      
                    
                    
                      
                        android:background
                      
                      


=
                      
                        "@drawable/topback"
                      
                      
                        android:gravity
                      
                      


=
                      
                        "bottom"
                      
                      
                        >
                      
                    
                    
                      <!-- android:layout_alignParentTop 与父元素顶部是否对齐,这里true,就是把这个topmenu放屏幕顶部 -->
                    
                    
                      
                        <LinearLayout
                      
                      
                        android:id
                      
                      


=
                      
                        "@+id/task"
                      
                      
                        android:orientation
                      
                      


=
                      
                        "horizontal"
                      
                    
                    
                      
                        android:layout_height
                      
                      


=
                      
                        "35dip"
                      
                      
                        android:layout_width
                      
                      


=
                      
                        "100dip"
                      
                    
                    
                      
                        android:background
                      
                      


=
                      
                        "@drawable/textback"
                      
                      
                        >
                      
                    
                    
                      
                        <TextView
                      
                      
                        android:layout_width
                      
                      


=
                      
                        "fill_parent"
                      
                      
                        android:id
                      
                      


=
                      
                        "@+id/taskText"
                      
                    
                    
                      
                        android:layout_height
                      
                      


=
                      
                        "fill_parent"
                      
                      
                        android:text
                      
                      


=
                      
                        "计划"
                      
                    
                    
                      
                        android:gravity
                      
                      


=
                      
                        "center"
                      
                      
                        android:textSize
                      
                      


=
                      
                        "20sp"
                      
                      
                        android:textColor
                      
                      


=
                      
                        "@color/white"
                      
                      
                        />
                      
                    
                    
                      
                        </LinearLayout
                        
                          >
                        
                      
                    
                    
                      
                        <LinearLayout
                      
                      
                        android:id
                      
                      


=
                      
                        "@+id/accounts"
                      
                    
                    
                      
                        android:orientation
                      
                      


=
                      
                        "horizontal"
                      
                      
                        android:layout_height
                      
                      


=
                      
                        "35dip"
                      
                    
                    
                      
                        android:layout_width
                      
                      


=
                      
                        "100dip"
                      
                      
                        >
                      
                    
                    
                      
                        <TextView
                      
                      
                        android:layout_width
                      
                      


=
                      
                        "fill_parent"
                      
                      
                        android:id
                      
                      


=
                      
                        "@+id/accountsText"
                      
                    
                    
                      
                        android:layout_height
                      
                      


=
                      
                        "fill_parent"
                      
                      
                        android:text
                      
                      


=
                      
                        "帐号"
                      
                    
                    
                      
                        android:gravity
                      
                      


=
                      
                        "center"
                      
                      
                        android:textSize
                      
                      


=
                      
                        "20sp"
                      
                      
                        android:textColor
                      
                      


=
                      
                        "@color/green"
                      
                    
                    
                      
                        />
                      
                    
                    
                      
                        </LinearLayout
                        
                          >
                        
                      
                    
                    
                      
                        <LinearLayout
                      
                      
                        android:id
                      
                      


=
                      
                        "@+id/sended"
                      
                    
                    
                      
                        android:orientation
                      
                      


=
                      
                        "horizontal"
                      
                      
                        android:layout_height
                      
                      


=
                      
                        "35dip"
                      
                    
                    
                      
                        android:layout_width
                      
                      


=
                      
                        "100dip"
                      
                      
                        >
                      
                    
                    
                      
                        <TextView
                      
                      
                        android:layout_width
                      
                      


=
                      
                        "fill_parent"
                      
                      
                        android:id
                      
                      


=
                      
                        "@+id/sendedText"
                      
                    
                    
                      
                        android:layout_height
                      
                      


=
                      
                        "fill_parent"
                      
                      
                        android:text
                      
                      


=
                      
                        "已发"
                      
                    
                    
                      
                        android:gravity
                      
                      


=
                      
                        "center"
                      
                      
                        android:textSize
                      
                      


=
                      
                        "20sp"
                      
                      
                        android:textColor
                      
                      


=
                      
                        "@color/green"
                      
                      
                        />
                      
                    
                    
                      
                        </LinearLayout
                        
                          >
                        
                      
                    
                    
                      
                        </LinearLayout
                        
                          >
                        
                      
                    
                    



 
 
	
                    
                      
                        <Button
                      
                      
                        android:id
                      
                      


=
                      
                        "@+id/button"
                      
                    
                    
                      
                        android:layout_alignParentBottom
                      
                      


=
                      
                        "true"
                      
                      
                        android:layout_width
                      
                      


=
                      
                        "fill_parent"
                      
                    
                    
                      
                        android:layout_height
                      
                      


=
                      
                        "wrap_content"
                      
                      
                        android:text
                      
                      


=
                      
                        "底部按钮"
                      
                      
                        />
                      
                    
                    
                      <!-- layout_alignParentBottom 与父元素底部是否对齐,这里true,就是把这个Button放屏幕底部 -->
                    
                    



 

                    
                      <!-- RelativeLayout必须先写四周的控件,再写中间的,这里先写顶部的Tab和底部的Button,再写中间的Content,因为中间的内容位置是不固定的 -->
                    
                    
                      
                        <LinearLayout
                      
                      
                        android:id
                      
                      


=
                      
                        "@+id/content"
                      
                    
                    
                      
                        android:orientation
                      
                      


=
                      
                        "vertical"
                      
                      
                        android:layout_width
                      
                      


=
                      
                        "fill_parent"
                      
                    
                    
                      
                        android:layout_height
                      
                      


=
                      
                        "fill_parent"
                      
                      
                        android:layout_below
                      
                      


=
                      
                        "@id/topmenu"
                      
                    
                    
                      
                        android:layout_above
                      
                      


=
                      
                        "@id/button"
                      
                      
                        >
                      
                      
                        </LinearLayout
                        
                          >
                        
                      
                    
                    
                      <!-- layout_below,当前控件放在设定控件下方 .
                    
                    
                      			android:layout_above 当前控件放在设定控件上方
                    
                    
                      			这里配合使用,就是放在顶部tab和底部Button的中间
                    
                    
                      		-->
                    
                    



 

                    
                      
                        </RelativeLayout
                        
                          >
                        
                      
                    
                  

程序代码:

                    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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

                  
                    
                      package
                    
                    
                      com.pocketdigi
                    
                    
                      ;
                    
                    



 

                    
                      import
                    
                    
                      android.app.Activity
                    
                    
                      ;
                    
                    
                      import
                    
                    
                      android.os.Bundle
                    
                    
                      ;
                    
                    
                      import
                    
                    
                      android.view.LayoutInflater
                    
                    
                      ;
                    
                    
                      import
                    
                    
                      android.view.View
                    
                    
                      ;
                    
                    
                      import
                    
                    
                      android.view.View.OnClickListener
                    
                    
                      ;
                    
                    
                      import
                    
                    
                      android.widget.LinearLayout
                    
                    
                      ;
                    
                    
                      import
                    
                    
                      android.widget.TextView
                    
                    
                      ;
                    
                    



 

                    
                      public
                    
                    
                      class
                    
                    


 Main 
                    
                      extends
                    
                    


 Activity 
                    
                      {
                    
                    
                      /** Called when the activity is first created. */
                    
                    



	LinearLayout task, accounts, sended, content
                    
                      ;
                    
                    



	TextView taskText, accountsText, sendedText
                    
                      ;
                    
                    



 
	@Override
	
                    
                      public
                    
                    
                      void
                    
                    


 onCreate
                    
                      (
                    
                    


Bundle savedInstanceState
                    
                      )
                    
                    
                      {
                    
                    
                      super
                    
                    


.
                    
                      onCreate
                    
                    
                      (
                    
                    


savedInstanceState
                    
                      )
                    
                    
                      ;
                    
                    



		setContentView
                    
                      (
                    
                    


R.
                    
                      layout
                    
                    


.
                    
                      main
                    
                    
                      )
                    
                    
                      ;
                    
                    



		task 
                    
                      =
                    
                    
                      (
                    
                    


LinearLayout
                    
                      )
                    
                    


 findViewById
                    
                      (
                    
                    


R.
                    
                      id
                    
                    


.
                    
                      task
                    
                    
                      )
                    
                    
                      ;
                    
                    



		accounts 
                    
                      =
                    
                    
                      (
                    
                    


LinearLayout
                    
                      )
                    
                    


 findViewById
                    
                      (
                    
                    


R.
                    
                      id
                    
                    


.
                    
                      accounts
                    
                    
                      )
                    
                    
                      ;
                    
                    



		sended 
                    
                      =
                    
                    
                      (
                    
                    


LinearLayout
                    
                      )
                    
                    


 findViewById
                    
                      (
                    
                    


R.
                    
                      id
                    
                    


.
                    
                      sended
                    
                    
                      )
                    
                    
                      ;
                    
                    



		content 
                    
                      =
                    
                    
                      (
                    
                    


LinearLayout
                    
                      )
                    
                    


 findViewById
                    
                      (
                    
                    


R.
                    
                      id
                    
                    


.
                    
                      content
                    
                    
                      )
                    
                    
                      ;
                    
                    



 
		taskText 
                    
                      =
                    
                    
                      (
                    
                    


TextView
                    
                      )
                    
                    


 findViewById
                    
                      (
                    
                    


R.
                    
                      id
                    
                    


.
                    
                      taskText
                    
                    
                      )
                    
                    
                      ;
                    
                    



		accountsText 
                    
                      =
                    
                    
                      (
                    
                    


TextView
                    
                      )
                    
                    


 findViewById
                    
                      (
                    
                    


R.
                    
                      id
                    
                    


.
                    
                      accountsText
                    
                    
                      )
                    
                    
                      ;
                    
                    



		sendedText 
                    
                      =
                    
                    
                      (
                    
                    


TextView
                    
                      )
                    
                    


 findViewById
                    
                      (
                    
                    


R.
                    
                      id
                    
                    


.
                    
                      sendedText
                    
                    
                      )
                    
                    
                      ;
                    
                    



 
		LayoutInflater factory 
                    
                      =
                    
                    


 LayoutInflater.
                    
                      from
                    
                    
                      (
                    
                    
                      this
                    
                    
                      )
                    
                    
                      ;
                    
                    
                      View
                    
                    


 taskView 
                    
                      =
                    
                    


 factory.
                    
                      inflate
                    
                    
                      (
                    
                    


R.
                    
                      layout
                    
                    


.
                    
                      task
                    
                    


, 
                    
                      null
                    
                    
                      )
                    
                    
                      ;
                    
                    
                      View
                    
                    


 accountsView 
                    
                      =
                    
                    


 factory.
                    
                      inflate
                    
                    
                      (
                    
                    


R.
                    
                      layout
                    
                    


.
                    
                      accounts
                    
                    


, 
                    
                      null
                    
                    
                      )
                    
                    
                      ;
                    
                    
                      View
                    
                    


 sendedView 
                    
                      =
                    
                    


 factory.
                    
                      inflate
                    
                    
                      (
                    
                    


R.
                    
                      layout
                    
                    


.
                    
                      sended
                    
                    


, 
                    
                      null
                    
                    
                      )
                    
                    
                      ;
                    
                    
                      //把三个内容视图的XML文件转化成View
                    
                    



 
		content.
                    
                      addView
                    
                    
                      (
                    
                    


taskView
                    
                      )
                    
                    
                      ;
                    
                    
                      //启动时默认载入taskView
                    
                    



 
		task.
                    
                      setOnClickListener
                    
                    
                      (
                    
                    
                      new
                    
                    


 TabListener
                    
                      (
                    
                    


task, taskText, taskView
                    
                      )
                    
                    
                      )
                    
                    
                      ;
                    
                    



		accounts.
                    
                      setOnClickListener
                    
                    
                      (
                    
                    
                      new
                    
                    


 TabListener
                    
                      (
                    
                    


accounts, accountsText,
				accountsView
                    
                      )
                    
                    
                      )
                    
                    
                      ;
                    
                    



		sended.
                    
                      setOnClickListener
                    
                    
                      (
                    
                    
                      new
                    
                    


 TabListener
                    
                      (
                    
                    


sended, sendedText,
				sendedView
                    
                      )
                    
                    
                      )
                    
                    
                      ;
                    
                    
                      //设置三个tab的点击监听器
                    
                    



 
	
                    
                      }
                    
                    



 
	
                    
                      class
                    
                    


 TabListener 
                    
                      implements
                    
                    


 OnClickListener 
                    
                      {
                    
                    



		LinearLayout layout
                    
                      ;
                    
                    



		TextView tv
                    
                      ;
                    
                    
                      View
                    
                    


 subView
                    
                      ;
                    
                    



 
		TabListener
                    
                      (
                    
                    


LinearLayout layout, TextView tv, 
                    
                      View
                    
                    


 subView
                    
                      )
                    
                    
                      {
                    
                    
                      this
                    
                    


.
                    
                      layout
                    
                    
                      =
                    
                    


 layout
                    
                      ;
                    
                    
                      this
                    
                    


.
                    
                      tv
                    
                    
                      =
                    
                    


 tv
                    
                      ;
                    
                    
                      this
                    
                    


.
                    
                      subView
                    
                    
                      =
                    
                    


 subView
                    
                      ;
                    
                    
                      }
                    
                    



 
		@Override
		
                    
                      public
                    
                    
                      void
                    
                    


 onClick
                    
                      (
                    
                    
                      View
                    
                    


 v
                    
                      )
                    
                    
                      {
                    
                    
                      // TODO Auto-generated method stub
                    
                    



			task.
                    
                      setBackgroundDrawable
                    
                    
                      (
                    
                    
                      null
                    
                    
                      )
                    
                    
                      ;
                    
                    



			accounts.
                    
                      setBackgroundDrawable
                    
                    
                      (
                    
                    
                      null
                    
                    
                      )
                    
                    
                      ;
                    
                    



			sended.
                    
                      setBackgroundDrawable
                    
                    
                      (
                    
                    
                      null
                    
                    
                      )
                    
                    
                      ;
                    
                    



			taskText.
                    
                      setTextColor
                    
                    
                      (
                    
                    


getResources
                    
                      (
                    
                    
                      )
                    
                    


.
                    
                      getColor
                    
                    
                      (
                    
                    


R.
                    
                      color
                    
                    


.
                    
                      green
                    
                    
                      )
                    
                    
                      )
                    
                    
                      ;
                    
                    



			accountsText.
                    
                      setTextColor
                    
                    
                      (
                    
                    


getResources
                    
                      (
                    
                    
                      )
                    
                    


.
                    
                      getColor
                    
                    
                      (
                    
                    


R.
                    
                      color
                    
                    


.
                    
                      green
                    
                    
                      )
                    
                    
                      )
                    
                    
                      ;
                    
                    



			sendedText.
                    
                      setTextColor
                    
                    
                      (
                    
                    


getResources
                    
                      (
                    
                    
                      )
                    
                    


.
                    
                      getColor
                    
                    
                      (
                    
                    


R.
                    
                      color
                    
                    


.
                    
                      green
                    
                    
                      )
                    
                    
                      )
                    
                    
                      ;
                    
                    
                      // 全部设为未选中状态
                    
                    



 
			layout.
                    
                      setBackgroundResource
                    
                    
                      (
                    
                    


R.
                    
                      drawable
                    
                    


.
                    
                      textback
                    
                    
                      )
                    
                    
                      ;
                    
                    



			tv.
                    
                      setTextColor
                    
                    
                      (
                    
                    


getResources
                    
                      (
                    
                    
                      )
                    
                    


.
                    
                      getColor
                    
                    
                      (
                    
                    


R.
                    
                      color
                    
                    


.
                    
                      white
                    
                    
                      )
                    
                    
                      )
                    
                    
                      ;
                    
                    
                      // 设置选中项
                    
                    



 
			content.
                    
                      removeAllViews
                    
                    
                      (
                    
                    
                      )
                    
                    
                      ;
                    
                    
                      //移除所有内容
                    
                    



			content.
                    
                      addView
                    
                    
                      (
                    
                    


subView
                    
                      )
                    
                    
                      ;
                    
                    
                      //添加传入的View
                    
                    



 
		
                    
                      }
                    
                    



 
	
                    
                      }
                    
                    
                      }
                    
                  

Strings.xml中存两个颜色值:

                    1
2

                  
                    
                      
                        <color
                      
                      
                        name
                      
                      


=
                      
                        "white"
                      
                      
                        >
                      
                    
                    


#ffffff
                    
                      
                        </color
                        
                          >
                        
                      
                    
                    
                      
                        <color
                      
                      
                        name
                      
                      


=
                      
                        "green"
                      
                      
                        >
                      
                    
                    


#0cc054
                    
                      
                        </color
                        
                          >
                        
                      
                    
                  

三个内容视图的xml,只贴一个,另两个一样,名字不同而已:
task.xml:

                    1
2
3
4
5
6
7
8

                  
                    
                      
                        <?xml
                      
                      
                        version
                      
                      


=
                      
                        "1.0"
                      
                      
                        encoding
                      
                      


=
                      
                        "utf-8"
                      
                      
                        ?>
                      
                    
                    
                      
                        <TextView
                      
                    
                    
                      
                        xmlns:android
                      
                      


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


=
                      
                        "fill_parent"
                      
                    
                    
                      
                        android:layout_height
                      
                      


=
                      
                        "fill_parent"
                      
                    
                    
                      
                        android:text
                      
                      


=
                      
                        "Task"
                      
                    
                    
                      
                        >
                      
                    
                    
                      
                        </TextView
                        
                          >
                        
                      
                    
                  

RelativeLayout 的使用实例 类似自定义TabHost效果《》


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论