android tabHost布局之一 不继承TabActivity并以布局文件进行布局

时间:2022-08-01 19:25:51

android tabHost布局之一 不继承TabActivity并以布局文件进行布局

上图为最终效果图

代码结构图

 android tabHost布局之一 不继承TabActivity并以布局文件进行布局

main.xml

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
  3.     android:id="@+id/hometabs"  
  4.     android:orientation="vertical"  
  5.     android:layout_width="fill_parent"    
  6.     android:layout_height="fill_parent">  
  7.     <!-- TabHost必须包含一个 TabWidget和一个FrameLayout-->   
  8.     <TabHost android:id="@+id/tabhost"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         >  
  12.         <LinearLayout  
  13.             android:orientation="vertical"  
  14.             android:layout_width="fill_parent"  
  15.             android:layout_height="fill_parent">  
  16.             <!-- TabWidget的id属性必须为 @android:id/tabs-->              
  17.             <TabWidget android:id="@android:id/tabs"   
  18.               android:orientation="horizontal"  
  19.               android:layout_width="fill_parent"  
  20.               android:layout_height="wrap_content">  
  21.             </TabWidget>  
  22.             <!-- FrameLayout的id属性必须为 @android:id/tabcontent-->  
  23.              <FrameLayout android:id="@android:id/tabcontent"  
  24.                   android:layout_width="fill_parent"  
  25.                   android:layout_height="fill_parent">  
  26.                     <TextView android:id="@+id/view1"  
  27.                         android:layout_width="fill_parent"  
  28.                         android:layout_height="fill_parent"/>  
  29.                     <TextView android:id="@+id/view2"  
  30.                         android:layout_width="fill_parent"  
  31.                         android:layout_height="fill_parent"/>  
  32.                     <TextView android:id="@+id/view3"  
  33.                         android:layout_width="fill_parent"  
  34.                         android:layout_height="fill_parent"/>  
  35.              </FrameLayout>  
  36.            
  37.          </LinearLayout>  
  38.     </TabHost>  
  39. </LinearLayout>  

java代码如下

[java] view plaincopy
  1. package cn.com.tagHost.test;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.widget.TabHost;  
  6. import android.widget.TabWidget;  
  7.   
  8. public class TagHostTest2 extends Activity {  
  9.     @Override  
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.main);  
  13.         // 获取TabHost对象  
  14.         TabHost tabHost = (TabHost) findViewById(R.id.tabhost);  
  15.         // 如果没有继承TabActivity时,通过该种方法加载启动tabHost  
  16.         tabHost.setup();  
  17.         tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("第一个标签",  
  18.                 getResources().getDrawable(R.drawable.icon)).setContent(  
  19.                 R.id.view1));  
  20.   
  21.         tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("第三个标签")  
  22.                 .setContent(R.id.view3));  
  23.   
  24.         tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("第二个标签")  
  25.                 .setContent(R.id.view2));  
  26.     }  
  27. }  

运行得到正确的结果。

 

 

废话连篇:这里需要注意的是

第一:布局文件的格式。以及TabWidget和FrameLayout的id属性值。

第二:TabWidget代表的是标签部分,FrameLayout代表的点击标签后看到的内容部分。FrameLayout里面声明的组件意为具备成为标签内容的资格,具体的还要在代码中具体指定。

 

你是否也想要这种结果呢。让标签在下部分显示

android tabHost布局之一 不继承TabActivity并以布局文件进行布局

那么你只需要给main.xml进行下布局修改就可以了。

main.xml

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/hometabs" android:orientation="vertical"  
  4.     android:layout_width="fill_parent" android:layout_height="fill_parent">  
  5.     <!-- TabHost必须包含一个 TabWidget和一个FrameLayout-->  
  6.     <TabHost android:id="@+id/tabhost" android:layout_width="fill_parent"  
  7.         android:layout_height="wrap_content">  
  8.         <LinearLayout android:orientation="vertical"  
  9.             android:layout_width="fill_parent" android:layout_height="fill_parent">  
  10.   
  11.             <!-- FrameLayout的id属性必须为 @android:id/tabcontent-->  
  12.             <FrameLayout android:id="@android:id/tabcontent"  
  13.                 android:layout_width="fill_parent" android:layout_height="fill_parent">  
  14.                 <TextView android:id="@+id/view1" android:layout_width="fill_parent"  
  15.                     android:layout_height="fill_parent"   
  16.                     android:text="hello baby!"  
  17.                     />  
  18.                 <TextView android:id="@+id/view2" android:layout_width="fill_parent"  
  19.                     android:layout_height="fill_parent" />  
  20.                 <TextView android:id="@+id/view3" android:layout_width="fill_parent"  
  21.                     android:layout_height="fill_parent" />  
  22.             </FrameLayout>  
  23.             <RelativeLayout android:layout_width="fill_parent"  
  24.                 android:layout_height="fill_parent">  
  25.   
  26.                 <!-- TabWidget的id属性必须为 @android:id/tabs-->  
  27.                 <TabWidget android:id="@android:id/tabs"  
  28.                     android:orientation="horizontal" android:layout_width="fill_parent"  
  29.                     android:layout_height="wrap_content"  
  30.                     android:layout_alignParentBottom="true"  
  31.                     android:paddingBottom="0dp"  
  32.                     >  
  33.                 </TabWidget>  
  34.             </RelativeLayout>  
  35.         </LinearLayout>  
  36.     </TabHost>  
  37. </LinearLayout>  

      为了让标签和父容器底部持平,我们使用了android:layout_alignParentBottom="true",该属性只有在RelativeLayout布局中才会存在哦、这也是为什么我们将tabWidget放入一个RelativeLayout中的原因。

此外,在lineaerLayout布局中,TabWidget和FrameLayout的位置可是调换了哦。