`

android TabHost小结

阅读更多
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">
	<LinearLayout
		android:orientation="vertical"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent">
	<FrameLayout
		android:id="@android:id/tabcontent"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent"
		 android:layout_weight="1.0"
		android:paddingBottom="53px"/>
	<TabWidget
		android: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"/>
		<RadioGroup
			android: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">
			<RadioButton
				android: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"/>
			<RadioButton
				android: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"/>
			<RadioButton
				android: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);
	}
	
	@Override
	public 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
7
5
分享到:
评论
4 楼 zhangbd_Answer 2012-11-13  
楼主,为了让tabHost显示在下方,好像不需要把layout_gravity设置为bottom,只需要FrameLayout的layout_weight设置为1即可,我试过的
3 楼 jw72jw 2012-08-13  
楼主应该上截图
2 楼 gqdy365 2012-04-10  
paolongtao 写道
为了让tabHost显示在下方,要将RadioGroup的layout_gravity设置为bottom,再将FrameLayout的layout_weight设置为1,这样就可以将RadioGroup撑到最下方。style="@style/main_tab_bottom"里面定义了样式文件。



你设置给我看看,到底是没试过啊?帅哥


你好!代码是我程序里面截取的,我程序里面是这么做的!你可以试试!
1 楼 paolongtao 2012-03-27  
为了让tabHost显示在下方,要将RadioGroup的layout_gravity设置为bottom,再将FrameLayout的layout_weight设置为1,这样就可以将RadioGroup撑到最下方。style="@style/main_tab_bottom"里面定义了样式文件。



你设置给我看看,到底是没试过啊?帅哥

相关推荐

    Android Tabhost使用详解(详尽)

    #### 五、小结 通过继承 `TabActivity` 并结合 XML 和 Java 代码的方式,我们可以灵活地创建功能强大的标签式导航界面。这种方法不仅简化了 XML 文件,还提高了代码的可读性和维护性。希望本文能帮助你在Android...

    tabhost使用方法

    7. 小结: TabHost是Android早期版本中实现标签页切换的主要方式。随着Android SDK的更新,现在更多地使用ViewPager配合FragmentTabHost或BottomNavigationView来构建多页应用。尽管如此,理解TabHost的工作原理对于...

    智能家居系统 标签布局TabHost-教案.doc

    - **课堂小结**:强调理解和掌握TabHost布局的特性,以及资源的引用方法,重点在于实际应用中TabHost布局的设计,难点在于理解和使用相关的API以及编程规范。 通过以上内容的学习,学生不仅能理解TabHost在智能...

    Android编程入门很简单.(清华出版.王勇).part1

    1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse...

    疯狂Android讲义源码

     1.7 本章小结 33  第2章 Android应用的界面编程 35  2.1 界面编程与视图(View)组件 36  2.1.1 视图组件与容器组件 36  2.1.2 使用XML布局文件控制UI  界面 40  2.1.3 在代码中控制UI界面 41  2.1.4 使用...

    Android 选项卡效果

    #### 小结 通过以上步骤,我们可以实现在Android应用中创建具有选项卡效果的界面。这种方法简单直观,适合初学者快速上手。同时,也可以根据需求进一步定制选项卡的样式和功能,例如添加图标、更改文字颜色等,以...

    Android编程入门很简单.(清华出版.王勇).part2

    1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse...

    Android核心技术开发与实例详解—目录.pdf

    - **1.3 小结**:总结本章的主要内容,并为后续章节的学习做好铺垫。 #### 第2章:Android应用程序的构成 - **2.1 Android应用程序的解析** - **2.1.1 目录结构**:解释Android应用程序的标准目录结构及其意义。 ...

    Android简明应用程序开发[原创]

    ##### 1.5 小结 - 开发环境搭建是整个Android应用开发流程的基础,完成这些步骤后,开发者就可以开始编写代码并构建应用了。 #### 二、Android开发与调试基础 ##### 2.1 Android开发基础 - **Activity**:Activity...

    Android编程之TabWidget选项卡用法实例分析

    4 实现步骤4.1 创建TabHost4.2 添加Tab4.3 设置Tab内容4.4 启动TabHost5 注意事项5.1 TabHost与TabWidget的区别5.2 Tab内容的切换与更新5.3 动态添加Tab6 示例代码6.1 静态添加Tab6.2 动态添加Tab7 小结7.1 ...

Global site tag (gtag.js) - Google Analytics