TabHost的实现方式一:
通过继承TabActivity来实现
布局文件activity_main.xml文件内容如下:
MainActivity代码如下
public class MainActivity extends TabActivity {
private TabHost tabHost;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//通过继承TabActivity这种方式的主要目的就是方便获得TabHost对象
tabHost = getTabHost();
//把定义的布局文件加载到tabHost的视图里,true代表添加到其根元素处
LayoutInflater.from(this).inflate(R.layout.activity_main, tabHost.getTabContentView(), true);
//增加了三个标签页,newTabSpec里的参数是我们自定义的标签名称
//setIndicator是显示出来的标签名称
//setContent是该标签里面显示的内容
tabHost.addTab(tabHost.newTabSpec("tag1").setIndicator("第一页").setContent(R.id.tab1));
tabHost.addTab(tabHost.newTabSpec("tag2").setIndicator("第二页").setContent(R.id.tab2));
tabHost.addTab(tabHost.newTabSpec("tag3").setIndicator("第三页").setContent(R.id.tab3));
}
}
请记住一点,MainActivity中的setContentView已经没有了意义,我们是通过inflate来动态加载xml文件
所以务必把setContentView那行代码删除,不然会报错。
*********************************************************************************************************************
TabHost的实现方式二:
在XML文件中进行定义TabHost组件,相比较为复杂。其中标签页是在底部的布局文件如下
MainActivity代码如下
public class MainActivity extends Activity {
private TabHost tabHost;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabhost);
tabHost = (TabHost) findViewById(R.id.tabHost);
tabHost.setup();
View view1 = View.inflate(this, R.layout.tabview1, null);
View view2 = View.inflate(this, R.layout.tabview2, null);
View view3 = View.inflate(this, R.layout.tabview3, null);
View view4 = View.inflate(this, R.layout.tabview4, null);
tabHost.addTab(tabHost.newTabSpec("tag1").setIndicator(view1).setContent(R.id.tab1));
tabHost.addTab(tabHost.newTabSpec("tag2").setIndicator(view2).setContent(R.id.tab2));
tabHost.addTab(tabHost.newTabSpec("tag3").setIndicator(view3).setContent(R.id.tab3));
tabHost.addTab(tabHost.newTabSpec("tag4").setIndicator(view4).setContent(R.id.tab4));
}
}
一些View。
*********************************************************************************************************************
TabHost与ActivityGroup的结合使用
在开发中,有可能在一个TabHost标签中(tag1)有多个页面的跳转这样的需求,那么就可以使用到这种方式实现了。
第一点,该TabHost必须继承于TabActivity的方式实现
第二点,ActivityGroup的管理
第一步,上面的方式一。
第二步,代码如下
public class MainActivity extends TabActivity {
private TabHost tabHost;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.tabhost);
tabHost = getTabHost();
LayoutInflater.from(this).inflate(R.layout.activity_main, tabHost.getTabContentView(),true);
View view1 = View.inflate(this, R.layout.tabview1, null);
View view2 = View.inflate(this, R.layout.tabview2, null);
View view3 = View.inflate(this, R.layout.tabview3, null);
//通过意图跳转
Intent intent = new Intent(MainActivity.this,MyActivityGroup.class);
//第一个标签的setContent参数为意图对象
tabHost.addTab(tabHost.newTabSpec("tag1").setIndicator(view1).setContent(intent));
tabHost.addTab(tabHost.newTabSpec("tag2").setIndicator(view2).setContent(R.id.test2));
tabHost.addTab(tabHost.newTabSpec("tag3").setIndicator(view3).setContent(R.id.test3));
}
}
public class MyActivityGroup extends ActivityGroup {
public static ActivityGroup group;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
group = this;
}
public void onBackPressed() {
//group.getLocalActivityManager().getCurrentActivity().onBackPressed();
}
protected void onResume() {
super.onResume();
//要跳转的界面
Intent intent = new Intent(this, FirstActivity.class).
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//把一个Activity转换成一个View
Window w = group.getLocalActivityManager().startActivity("FirstActivity",intent);
View view = w.getDecorView();
//把View添加大ActivityGroup中
group.setContentView(view);
}
}
public class FirstActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.zhang); //这里你想显示什么就通过布局文件来写
}
//我在布局文件中增加了一个按钮,该按钮实现了跳转到该标签的下一个页面
//其实和在ActivityGroup跳转到本Activity的区别不大,就多了一个类名来调用group
public void click(View v){
Intent intent = new Intent(FirstActivity.this, SecondActivity.class).
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Window w = MyActivityGroup.group.getLocalActivityManager()
.startActivity("SecondActivity",intent);
View view = w.getDecorView();
MyActivityGroup.group.setContentView(view);
}
}
<activity android:name=".FirstActivity" />
<activity android:name=".SecondActivity" />