TabHost用法
tabhost用两种方法
方法一:Activity继承TabActivity后用getTabHost()方法来获取tabhost(前提:Activity的setContentView要删除,这样布局才能用TabActivity的默认布局,这样TabActivity的setup方法才不会出错),获取完后再对tabhost布局进行设置
方法二:用findViewById方法来获取tabhost,只是findViewById里的布局xml要符合一以下的格式
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"> </FrameLayout> </LinearLayout> </TabHost>
然后调用tabhost.setup()方法,再调用addTab()方法
代码如下:
MyTabActivity
package com.my.studyofandroid; import android.os.Bundle; import android.app.Activity; import android.text.AndroidCharacter; import android.view.LayoutInflater; import android.view.Menu; import android.widget.TabHost; ///tabhost方法一:继承TabActivity类,用getTabHost()方法来建tabhost。这时setContentView()要去掉,不限制xml布局文件里是否要有Tabhost,TabWidget,FrameLayout等 内容并且格式要固定 @SuppressWarnings("deprecation") public class MyTabActivity extends android.app.TabActivity { @Override protected void onCreate(Bundle savedInstanceState) { ///tabhost方法一 super.onCreate(savedInstanceState); // setContentView(R.layout.activity_mytab);///这句话要删除不然会报错:Your TabHost must have a TabWidget whose id attribute is 'android.R.id.tabs ///用TabActivity的方法获取tabhost对象 TabHost tabhost=getTabHost(); //设置使用tabhost的布局 LayoutInflater.from(this).inflate(R.layout.activity_mytab, tabhost.getTabContentView(),true); ///加tab,tab里的布局是由另一个xml决定 tabhost.addTab(tabhost.newTabSpec("tab1").setContent(R.id.tab_1).setIndicator("选择卡1")); tabhost.addTab(tabhost.newTabSpec("tab2").setContent(R.id.tab_2).setIndicator("选择卡2")); /* ///tabhost方法二:如果用方法二,可以不继承TabActivity了,因为用不到getTabHost方法 super.onCreate(savedInstanceState); setContentView(R.layout.activity_mytab);///activity_mytab.xml里的格式见最下面代码 TabHost tabHost=(TabHost)findViewById(R.id.tabhost);///获取TabHost 通过findviewbyid tabhost.setup();///在加tab到tabhost之前要执行此方法,也就是说通过findviewbyid方法获得tabhost必须setup(), 而通过getTabHost则不用。查看setup源码就知道为什么TabWidget和FrameLayout必须用系统自定义的id ///加tab tabhost.addTab(tabhost.newTabSpec("tab1").setContent(R.id.tab_1).setIndicator("选择卡1")); tabhost.addTab(tabhost.newTabSpec("tab2").setContent(R.id.tab_2).setIndicator("选择卡2")); */ } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.tab, menu); return true; } } ///如果用方法二,activity_mytab。xml的格式必须如下:当然要包含Tabhost,TabWidget,FrameLayout,着3个标签: /* <?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabhost" ///id必须为tabhost android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" ///id必须为tabs android:layout_width="fill_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" ///id必须为tabcontent android:layout_width="fill_parent" android:layout_height="fill_parent"> ///下面是两个tab布局 <LinearLayout android:id="@+id/tab_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView1" android:layout_marginTop="72dp" android:layout_toRightOf="@+id/textView1" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> <LinearLayout android:id="@+id/tab_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/tab_1" android:layout_below="@+id/tab_1" android:layout_marginTop="116dp" android:orientation="vertical" > <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout> </FrameLayout> </LinearLayout> </TabHost> */
activity_mytab.xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MyTabActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <LinearLayout android:id="@+id/tab_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView1" android:layout_marginTop="72dp" android:layout_toRightOf="@+id/textView1" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> <LinearLayout android:id="@+id/tab_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/tab_1" android:layout_below="@+id/tab_1" android:layout_marginTop="116dp" android:orientation="vertical" > <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout> </RelativeLayout>