TabHost是整个Tab的容器,包括两部分,TabWidget和FrameLayout。TabWidget就是每个tab的标签,FrameLayout则是tab内容。

1、如果我们使用extends TabAcitivty,如同ListActivity,TabHost必须设置为@android:id/tabhost
2、TabWidget必须设置android:id为@android:id/tabs
3、FrameLayout需要设置android:id为@android:id/tabcontent
4、参考这儿:http://blog.csdn.net/flowingflying/archive/2011/04/06/6304289.aspx

先自定义一个xml文件:
<?xml version="1.0" encoding="utf-8"?><TabHost xmlns:android="http://schemas.android.com/apk/res/android"android:id="@android:id/tabhost"android:layout_width="fill_parent"android:layout_height="fill_parent"><LinearLayoutandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><FrameLayoutandroid:id="@android:id/tabcontent"android:layout_width="fill_parent"android:layout_height="fill_parent" android:layout_weight="1.0"android:paddingBottom="53px"/><TabWidgetandroid:id="@android:id/tabs"android:layout_alignParentBottom="true"android:layout_width="fill_parent"android:layout_height="50px" android:visibility="gone"android:layout_weight="0.0"/><RadioGroupandroid:gravity="center_vertical"android:orientation="horizontal"android:id="@+id/main_radio"android:background="@drawable/radiogroup_background"android:layout_width="fill_parent"android:layout_height="50dip"android:layout_gravity="bottom"><RadioButtonandroid:id="@+id/main_index_button"android:layout_marginTop="1.0dip"android:layout_marginRight="5dip"android:text="@string/main_name"android:drawableTop="@drawable/unistall"style="@style/main_tab_bottom"android:background="@drawable/radio_bg"/><RadioButtonandroid:id="@+id/main_running_button"android:layout_marginTop="1.0dip"android:layout_marginRight="5dip"android:text="@string/run_manager_name"android:drawableTop="@drawable/unistall"style="@style/main_tab_bottom"android:background="@drawable/radio_bg"/><RadioButtonandroid:id="@+id/main_uninstall_button"android:layout_marginTop="1.0dip"android:text="@string/uninstall_manager_name"android:drawableTop="@drawable/unistall"style="@style/main_tab_bottom"android:background="@drawable/radio_bg"/></RadioGroup></LinearLayout></TabHost>

为了让tabHost显示在下方,要将RadioGroup的layout_gravity设置为bottom,再将FrameLayout的layout_weight设置为1,这样就可以将RadioGroup撑到最下方。style="@style/main_tab_bottom"里面定义了样式文件。

接下来就是在activity中初始化并添加tabhost:
tabHost = (TabHost) findViewById(android.R.id.tabhost);tabHost.addTab(Constant.tabHost.newTabSpec("Main").setIndicator(getString(R.string.main_name),null).setContent(new Intent(this, Main.class)));tabHost.addTab(Constant.tabHost.newTabSpec("RunManager").setIndicator(getString(R.string.run_manager_name),null).setContent(new Intent(this, RunManager.class)));tabHost.addTab(Constant.tabHost.newTabSpec("UninstallManager").setIndicator(getString(R.string.uninstall_manager_name),null).setContent(new Intent(this, UninstallManager.class)));


初始化每个RadioButton并为其添加setOnCheckedChangeListener事件,当点击相应的RadioButton时就可以通过setCurrentTabByTag()方法显示到当前页面。
private void initRadios() {((RadioButton) findViewById(R.id.main_index_button)).setOnCheckedChangeListener(this);((RadioButton) findViewById(R.id.main_running_button)).setOnCheckedChangeListener(this);((RadioButton) findViewById(R.id.main_uninstall_button)).setOnCheckedChangeListener(this);}@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if(isChecked){switch (buttonView.getId()) {case R.id.main_index_button:tabHost.setCurrentTabByTag("Main");break;case R.id.main_running_button:tabHost.setCurrentTabByTag("RunManager");break;case R.id.main_uninstall_button:tabHost.setCurrentTabByTag("UninstallManager");break;}}}


小结:
1、在一个tabActivity里面嵌套一个tabAcitivity, 如果在子tabActivity里面显示AlertDialog、ProgressDialog的话,就会引发此错误:android.view.WindowManager$BadTokenException: Unable to add window

解决方法:
可以把创建dialog时传递的参数xxx.this改成this.getParent(),其中的xxx为Activity

更多相关文章

  1. Android 4.4 SD卡文件读写变化
  2. Android 自动编译、打包生成apk文件 2 - 使用原生Ant方式
  3. Android学习之路(一)之 Android文件简单介绍
  4. Android 上如何移植live555生成库文件
  5. Android NDK 使用第一步,编译c文件,声明jni并调用。
  6. Android中文件的读写
  7. Android 文件系统及权限修改
  8. Android中对Log日志文件的分析

随机推荐

  1. PHP根据键值合并数组
  2. php单例模式 使用场景和使用方法
  3. 学习PHP死循环写法和作用
  4. PHP 简单实现延时操作
  5. 详细解读PHP中return用法(附代码)
  6. PHP yield 协程 生成器用法的了解
  7. Go,PHP,Swoole 并发测试详解
  8. php快速实现联系客服(在线咨询)
  9. PHP开发自己的框架,你必须知道这些知识点!
  10. 分享一个PHP基本语法的心得