android开发 -TabHost控件

第一次写博客。本科毕业设计做了个Android APP,花了三个月的时间,有不少收获。不想把它浪费掉,就一点点地把自己认为好的知识点分享一下。今天讲一下,TabHost组件的应用。

       TabHost控件用来设计主界面,先贴出效果图。

        android开发 -TabHost控件 - 阿里云
android:layout_height="0.0dip"
android:layout_weight="1.0" />
android:layout_width="fill_parent"
android:layout_height="0.20000005dip" />
android:orientation="horizontal" android:id="@+id/radio_group"
android:background="#ffffffff" android:layout_width="fill_parent"
android:layout_height="@dimen/main_tab_bar_height">
android:id="@+id/rb_home_guid"
android:tag="radio_button0"
style="@style/main_tab_bottom" android:text="找房源"
android:drawableTop="@drawable/main_home" />
android:id="@+id/rb_pre_house_list"
android:tag="radio_button1"
style="@style/main_tab_bottom" android:text="预约清单"
android:drawableTop="@drawable/main_prebook"/>
android:id="@+id/rb_personal_tailor_guid"
android:tag="radio_button2"
android:text="看房日程"
android:drawableTop="@drawable/main_house"/>
android:id="@+id/rb_more_guid" android:tag="radio_button3"
style="@style/main_tab_bottom" android:text="我的租房"
android:drawableTop="@drawable/main_more"/>

最外层是TabHost布局,里面是 FrameLayout和RadioGroup。FrameLayout盛放的是选项卡对应的内容界面,RadioGroup对应一组选项卡。RadioButton的drawableTop属性main_home.xml是一个选择子selector文件。

main_home.xml

<?xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android">
android:drawable="@drawable/tab_home_select" />





        当作为选项卡的RadioButton被点击时,它的背景图片是红色的;反之,它的背景图片是黑色的。好了,选项卡做好了。下面讲主界面对应的Activity,贴一下源码。
TabMainActivity.java

public class TabMainActivity extends TabActivityimplements CompoundButton.OnCheckedChangeListener{private TabHost host;//底部的4个button
private RadioButton rb_home_guid;
private RadioButton rb_pre_house_list;
private RadioButton rb_personal_tailor_guid;
private RadioButton rb_more_guid;protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState); setContentView(R.layout.tab_main);
this.host=getTabHost();
//添加底部选项卡
this.host.addTab(this.host.newTabSpec("tab_home").setIndicator("tab_home")
.setContent(new Intent(this,zfyActivity.class)));
this.host.addTab(this.host.newTabSpec("tab_search").setIndicator("tab_search")
.setContent(new Intent(this, yyqdActivity.class)));
this.host.addTab(this.host.newTabSpec("tab_info").setIndicator("tab_info")
.setContent(new Intent(this, kfrcActivity.class)));
this.host.addTab(this.host.newTabSpec("tab_more").setIndicator("tab_more")
.setContent(new Intent(this, wdzfActivity.class)));
initView();
}//当选项卡状态改变时
public void onCheckedChanged(CompoundButton paramCompoundButton, boolean paramBoolean) {
// TODO Auto-generated method stub
if(paramBoolean){//表示取得状态选中的选项卡
switch(paramCompoundButton.getId()){
case R.id.rb_home_guid:
this.host.setCurrentTabByTag("tab_home");
break;
case R.id.rb_pre_house_list:
this.host.setCurrentTabByTag("tab_search");
break;
case R.id.rb_personal_tailor_guid:
this.host.setCurrentTabByTag("tab_info");
break;
case R.id.rb_more_guid:
this.host.setCurrentTabByTag("tab_more");
break;
}
}
}//注册监听器
private void initView()
{
//看来初始化界面只有四个RadioButton
this.rb_home_guid = ((RadioButton)findViewById(R.id.rb_home_guid));
this.rb_pre_house_list = ((RadioButton)findViewById(R.id.rb_pre_house_list));
this.rb_personal_tailor_guid = ((RadioButton)findViewById(R.id.rb_personal_tailor_guid));
this.rb_more_guid = ((RadioButton)findViewById(R.id.rb_more_guid));
//RadioGroup设置状态改变监听器
this.rb_home_guid.setOnCheckedChangeListener(this);
this.rb_pre_house_list.setOnCheckedChangeListener(this);
this.rb_personal_tailor_guid.setOnCheckedChangeListener(this);
this.rb_more_guid.setOnCheckedChangeListener(this);
}
}

        “this.host=getTabHost()”是固定用法,表示取到xml文件中的TabHost资源。“setIndicator("tab_home")”表示给选项卡取名字,之后通过“host.setCurrentTabByTag("tab_home")”可以实现内容界面随着选项卡的改变而改变。initView()函数用来为RadioButton注册监听器,onCheckedChanged()函数响应监听状态的变化。
      zfyActivity.class的源代码如下。
zfyActivity.classpublic class zfyActivity extends Activity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.setContentView(R.layout.zfy_layout);
}
}
zfyActivity对应的布局文件如下。
zfy_layout.xml<?xml version="1.0" encoding="utf-8"?>
android:layout_width="match_parent"
android:layout_height="match_parent"
>
android:text="找房源"
android:gravity="center_horizontal"
android:layout_centerInParent="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>

        这里是DEMO的源码地址,大家可以下载到手机或者模拟器上运行。

        

        注明:
      博主毕业设计反编译了一款名为“租房帮”的APP,从中获得部分资源文件和后台文件的代码,因此博主编写的DEMO中有部分从“租房帮”APP那里得到的资源和代码。博主编写本篇博客,为交流技术之用,无盈利之目的,特此说明。
      下面是“租房帮”APP中 “关于我们” 板块的截图。

        android开发 -TabHost控件 - 阿里云