出处:http://blog.sina.com.cn/s/blog_6bec714e0100tv12.html
在使用了一个TabHost控件,下面我们来详细讲解下这个控件以及使用这个控件时,应该注意的一些问题。
使用TabHost有两种方法:
一种是继承TabActivity;
一种是不继承TabActivity;在这里我要讲解的是继承TabActivity的;首先我们得写好main.xml布局文件,在写这个布局文件时要注意,使用TabHost一定要有TabWidget、FramLayout这两个控件,并且TabWidget必须使用系统ID @android:id/tabs;FrameLayout作为标签内容的基本框架,也必须使用系统ID @android:id/tabcontent(TabWidget最好在FrameLayout上声时要不然TabWidget不会显示,但不会报错);而TabHost可以自定义ID,这是为了在系统初始化时能够使用,否则会报错!
示例一(最基本的)代码:
1)先建一个布局文件:res/layout/tab_demo.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
android:id="@+id/dd"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<TextView android:id="@+id/tab_demo_tv1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="tab_demo_tv1"
/>
<TextView android:id="@+id/tab_demo_tv2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="tab_demo_tv2"
/>
<TextView android:id="@+id/tab_demo_tv3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="tab_demo_tv3"
/>
</FrameLayout>
2)
tabHost = getTabHost();
tabHost.setBackgroundColor(Color.argb(150, 22, 70, 150));//设置背景
LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(), true); //初使化布局控件
//R.layout.main 存放Tab布局
//通过TabHost获得存放Tab标签页内容的FrameLayout
//是否将inflate 拴系到根布局元素上
tabHost.addTab(tabHost.newTabSpec("tab11").setIndicator("Tab1", getResources().getDrawable(R.drawable.abc)).setContent(R.id.tab_demo_tv1));
tabHost.addTab(tabHost.newTabSpec("tab22").setIndicator("Tab2", null).setContent(R.id.tab_demo_tv2));
tabHost.addTab(tabHost.newTabSpec("tab33").setIndicator("Tab3", null).setContent(R.id.tab_demo_tv3));
//增加tab改变事件
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String s) {
System.out.println(s+"s对应这里面设的名称tabHost.newTabSpec('tab11')---tab11");
}
});
示例二(最基本的通过Intent来改变Tab里的内容)代码:
1)res/layout/main.xml
<?xml version="1.0" encoding="UTF-8"?>
<TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent"
android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:orientation="vertical"
android:background="#DADADA"
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" android:layout_weight="0.0" />
<!-- 上下两个标签 是必须要有的-->
<FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="0.0dip" android:layout_weight="1.0" />
</LinearLayout>
</TabHost>
2)
public class MainActivity extends TabActivity {
TabHost tabs ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tabs = getTabHost();
TabSpec tab2 = tabs.newTabSpec("TwoActivity");
tab2.setIndicator("tab2"); // 设置tab1的名称
tab2.setContent(new Intent(MainActivity.this,TwoActivity.class)); // 关联控件
tabs.addTab(tab2);
//设置Tab1
TabSpec tab1 = tabs.newTabSpec("OneActivity");
tab1.setIndicator("tab1"); // 设置tab1的名称
tab1.setContent(new Intent(MainActivity.this,OneActivity.class)); // 关联控件
tabs.addTab(tab1); // 添加tab1
TabSpec tab3 = tabs.newTabSpec("TwoActivity");
tab3.setIndicator("tab3"); // 设置tab1的名称
tab3.setContent(new Intent(MainActivity.this,TwoActivity.class)); // 关联控件
tabs.addTab(tab3);
tabs.setCurrentTab(0); //显示一个Tab标签 作为当前的显示业
}
}
问:下面我们来说明一下如何改变每个标签的大小和位置呢?如何设置每个标签的背景颜色或图片呢