使用TabHost实现标签页


使用场景,如:通讯录,QQ,等通讯软件都有使用


TabHost是一个标签页的集合




主布局如下:


<!-- 外部一个TabHost集合 -->
 <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/tabhost">


     <!-- TabHost中集合布局是使用线性布局 -->
     <LinearLayout 
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical">
         
         <!-- 布局中的标签切换卡,使用TabWidget来切换 ,这里的id是系统给定的名称,所以使用系统给定的tabs为id -->
         <TabWidget
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:id="@android:id/tabs"/>
         
         <!-- 布局中的每个标签内容使用桢布局 ,然后每个切换卡的内容使用LinearLayout布局 ,那么显示的内容就在LinearLayout中显示 -->
         <!-- 它的id是系统给定的tabcontent为id,调用如下,也可以查看源代码 -->
         <FrameLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:id="@android:id/tabcontent"> 
             
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="match_parent" 
                 android:id="@+id/page1">
                 
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="这是第一个标签页内容"/> 
             </LinearLayout>
             
              <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="match_parent" 
                 android:id="@+id/page2">
                 
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="这是第二个标签页内容"/> 
             </LinearLayout>
             
               <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="match_parent" 
                 android:id="@+id/page3">
                 
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="这是第三个标签页内容"/> 
             </LinearLayout>
             
         </FrameLayout> 
     </LinearLayout> 
 </TabHost>






自定义页面布局

<?xml version="1.0" encoding="utf-8"?>
 <!-- 这里是自定义的标签页 ,只是给TabWidget自定义--> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" >
     
     <TextView 
         android:background="@drawable/tab_bj"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:gravity="center"
         android:textSize="18sp"
         android:id="@+id/name"/> 
 </LinearLayout>




自定义布局的标签页的事件

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- 按下时 -->
     <item android:state_pressed="true" android:drawable="@drawable/a1" />
     <!-- 选中时 -->
     <item android:state_selected="true" android:drawable="@drawable/a2" />
     <!-- 默认 -->
     <item android:drawable="@drawable/ic_launcher" />
 </selector>







java代码


public class MainActivity extends Activity {
private TabHost tabHost;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         
         //找到TabHost对象
         tabHost = (TabHost)this.findViewById(R.id.tabhost);
         //设置TabWidget,和TabContent的
         tabHost.setup();
         
         //以下的标签页都是系统默认的,但是我们可以自定义标签页,也就是我们写一个View
         //设置标签页1
         TabSpec tabSpec = tabHost.newTabSpec("page1");
         //这是自定义
         tabSpec.setIndicator(createTabView("首页"));
         //这是系统默认的
         //tabSpec.setIndicator("首页",getResources().getDrawable(R.drawable.ic_launcher));
         tabSpec.setContent(R.id.page1);
         tabHost.addTab(tabSpec);
         
         //设置标签页1
         tabSpec = tabHost.newTabSpec("page1");
         //这是自定义
         tabSpec.setIndicator(createTabView("第二页"));
         //这是系统默认的
         //tabSpec.setIndicator("第二页",getResources().getDrawable(R.drawable.ic_launcher));
         tabSpec.setContent(R.id.page2);
         tabHost.addTab(tabSpec);
         
         //设置标签页1
         tabSpec = tabHost.newTabSpec("page1");
         //这是自定义
         tabSpec.setIndicator(createTabView("第三页"));
         //这是系统默认的
         //tabSpec.setIndicator("第三页",getResources().getDrawable(R.drawable.ic_launcher));
         tabSpec.setContent(R.id.page3);
         tabHost.addTab(tabSpec);
      
         //默认载入时,是在第一页
         tabHost.setCurrentTab(0);
     }




     private View createTabView(String name) {
View tabView = getLayoutInflater().inflate(R.layout.tab, null);
TextView tv = (TextView)tabView.findViewById(R.id.name);
tv.setText(name);
return tabView;
} 
 }