android TabHost小结_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > android TabHost小结

android TabHost小结

 2012/1/5 14:00:32  gqdy365  http://gqdy365.iteye.com  我要评论(0)
  • 摘要:TabHost是整个Tab的容器,包括两部分,TabWidget和FrameLayout。TabWidget就是每个tab的标签,FrameLayout则是tab内容。1、如果我们使用extendsTabAcitivty,如同ListActivity,TabHost必须设置为@android:id/tabhost2、TabWidget必须设置android:id为@android:id/tabs3、FrameLayout需要设置android:id为@android
  • 标签:android BHO
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
发表评论
用户名: 匿名