android TabHost的基本使用

来源:互联网 发布:阿里云主机伪静态 编辑:程序博客网 时间:2024/05/06 16:04

1.概念

      盛放Tab的容器就是TabHost。TabHost的实现有两种方式:

      第一种继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost。各个Tab中的内容在布局文件中定义就行了。

      第二种方式,不继承TabActivity,在布局文件中定义TabHost即可,但是TabWidget的id必须是@android:id/tabs,FrameLayout的id必须是@android:id/tabcontent。

 2.案例

1)继承TabActivity

res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?> <!-- 定义TabHost组件 --> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent">   <!-- 定义第一个标签页的内容 -->   <LinearLayout android:id="@+id/tab01" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">     <!-- 定义两个TextView用于显示标签页中的内容 -->     <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="孙悟空-2011/07/12"/>      <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="猪八戒-2011/07/10"/>   </LinearLayout>   <!-- 定义第二个标签页的内容 -->   <LinearLayout android:id="@+id/tab02" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">     <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="萨僧-2011/07/11"/>      <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="唐僧-2011/07/10"/>   </LinearLayout>   <!-- 定义第三个标签页的内容 -->   <LinearLayout android:id="@+id/tab03" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">     <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="孙悟空-2011/07/12"/>      <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="萨僧-2011/07/08"/>   </LinearLayout> </TabHost>

HelloTabHost.java

public class HelloTabHost extends TabActivity {   @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);      //调用TabActivity的getTabHost()方法获取TabHost对象     TabHost tabHost = getTabHost();      //设置使用TabHost布局     LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(),true);      //添加第一个标签页     tabHost.addTab(tabHost.newTabSpec("tab01").setIndicator("已接电话").setContent(R.id.tab01));      //添加第二个标签页,并在其标签上添加一个图片     tabHost.addTab(tabHost.newTabSpec("tab02").setIndicator("未接电话",getResources().getDrawable(R.drawable.icon)).setContent(R.id.tab02));      //添加第三个标签页     tabHost.addTab(tabHost.newTabSpec("tab03").setIndicator("已拨电话").setContent(R.id.tab03));   } }
运行效果图:



2)不继承TabActivity

     继承普通Activity,<TabWidget>标签id必须为tabs、<FrameLayout>标签id必须为tabcontent.这个方式在通过findViewById获得TabHost之后,必须要调用setup方法。

main.xml代码
<?xml version="1.0" encoding="utf-8"?>    <!-- TabHost必须包含一个 TabWidget和一个FrameLayout-->     <TabHost android:id="@+id/tabhost" android:layout_width="fill_parent" android:layout_height="wrap_content">          <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">              <!-- TabWidget的id属性必须为 @android:id/tabs-->                          <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="fill_parent"                android:layout_height="wrap_content" />              <!-- FrameLayout的id属性必须为 @android:id/tabcontent-->               <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent">                  <TextView android:id="@+id/view1" android:layout_width="fill_parent" android:layout_height="fill_parent"/>                  <TextView android:id="@+id/view2" android:layout_width="fill_parent" android:layout_height="fill_parent"/>                  <TextView android:id="@+id/view3" android:layout_width="fill_parent" android:layout_height="fill_parent"/>               </FrameLayout>           </LinearLayout>      </TabHost>  </LinearLayout>

Activity中代码:

public class TabHostTest extends Activity {      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          // 获取TabHost对象          TabHost tabHost = (TabHost) findViewById(R.id.tabhost);          // 如果没有继承TabActivity时,通过该种方法加载启动tabHost          tabHost.setup();          tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("第一个标签",                  getResources().getDrawable(R.drawable.icon)).setContent(                  R.id.view1));            tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("第三个标签")                  .setContent(R.id.view3));            tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("第二个标签")                  .setContent(R.id.view2));      }  }

效果图:




自定义TabHost的 TabWidget:

define.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="@drawable/bg"    android:orientation="vertical"     android:gravity="center"    >    <ImageView         android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/ic_launcher"        />        <TextView         android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        /></LinearLayout>

在Activity中的使用:

private View getView(String name){    LayoutInflater inflater = getLayoutInflater();    View v = inflater.inflate(R.layout.define, null);    TextView tv = (TextView) v.findViewById(R.id.tv);    tv.setText(name);    return v;    }

在tabHost中的设置头部的TabWidget:

 

TabSpec tab1 = tabHost.newTabSpec("one");tab1.setIndicator(getView("首页")); //设置自定义的<span style="color: rgb(75, 75, 75); font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px;">TabWidget</span>

 效果图:


0 0
原创粉丝点击