一个简单的TabHost布局
1.首先继承TabActivity
2.通过TabActivity的getTabHost()方法得到一个TabHost对象
3.定义选项卡的内容(是一个FrameLayout的对象),并与TabHost绑定起来
可以通过一下语句绑定TabHost容器的内容
LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(), true);
4.添加选项卡及设置选项的标题及内容
我们知道添加选项卡需要指定一个TabSpec对象,通过TabHost的newTabSpec(选项卡的标识)可以得到,并且可以设定选项卡的标题(可以设置图片),并且设置选项卡内容,如
tabHost.addTab(tabHost.newTabSpec("tab01")
.setIndicator("标签1",getResources().getDrawable(R.drawable.icon))
.setContent(R.id.tab01));
初学者注意了:
如果在 继承了TabActivity的类中设置了,setContentView(R.layout.main),则有可能导致错误,原因可能是因为main布局文件设置不正确(下面有详解),解决办法是建议先删除此行
上面的例子中TabHost只是与一个布局容器绑定,也就是说各个选项卡的内容是写在一个布局文件中的,然后通过不同的id来区分各个选项卡的内容.
如果选项卡的个数过多,或者每个选项卡的布局比较复杂的话,势必会使布局容器显得臃肿而且可读性比较差,不利于后期的维护。
Android中提供了我们还可以通过setContent(Intent intent)来指定每个选项卡的内容
源码: <IGNORE_JS_OP>(53.09 KB, 下载次数: 1)
下载积分: e币 -1 元
如果想要让选项卡栏在下方,那么只需要交换TabWidget和FrameLayout的位置即可,如
<?xml version="1.0" encoding="utf-8"?>
<TabHost
xmlns:andro语句
这个属性代表的是比重,android中所有的组件默认这个属性都是为0,意味着他们只在屏幕上显示他们需要空间的大小。
如果设置了该属性,activity将根据设置的值按比例来划分空间的大小
举个例子,如果acitivity中有三个组件,假设屏幕高为90cm,三个组件如果设置了该属性为0的话,那么他们会以正常的方式显示在屏幕上。
如果第一个组件设置组件设置为0,其余两个组件设置为1,那么这个屏幕将会以0:1:1的方式来显示,如果第一个组件默认占10cm,那么其他两个组件各占40cm
另一个例子源码:
TabHost的实现有两种方式,第一种继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost。各个Tab中的内容在布局文件中定义就行了。
mainActivity.xml
1 private TabHost myTabHost; 2 3 @Override 4 public void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 //setContentView(R.layout.main); 7 myTabHost = this.getTabHost(); 8 LayoutInflater.from(this).inflate(R.layout.main, 9 myTabHost.getTabContentView(), true); 10 myTabHost.addTab(myTabHost 11 .newTabSpec("选项卡1") 12 .setIndicator("选项卡1", 13 getResources().getDrawable(R.drawable.img01)) 14 .setContent(R.id.ll01)); 15 myTabHost.addTab(myTabHost 16 .newTabSpec("选项卡2") 17 .setIndicator("选项卡2", 18 getResources().getDrawable(R.drawable.img02)) 19 .setContent(R.id.ll01)); 20 myTabHost.addTab(myTabHost 21 .newTabSpec("选项卡3") 22 .setIndicator("选项卡3", 23 getResources().getDrawable(R.drawable.img03)) 24 .setContent(R.id.ll03)); 25 26 }
Tab内容布局文件:
1 <?xml version="1.0" encoding="utf-8"?> 2 <FrameLayout xmlns:andro 3 android:orientation="vertical" android:layout_width="fill_parent" 4 android:layout_height="fill_parent"> 5 <LinearLayout android: 6 android:layout_height="fill_parent" android:gravity="center_horizontal" 7 android:orientation="vertical"> 8 <EditText android: 9 android:layout_height="wrap_content" android:text="EditText" 10 android:textSize="18sp"> 11 </EditText> 12 <Button android: 13 android:layout_height="wrap_content" android:text="Button"> 14 </Button> 15 16 </LinearLayout> 17 <LinearLayout android: 18 android:layout_height="fill_parent" android:gravity="center_horizontal" 19 android:orientation="vertical"> 20 <AnalogClock android: 21 android:layout_width="wrap_content" android:layout_height="wrap_content"> 22 </AnalogClock> 23 </LinearLayout> 24 <LinearLayout android: 25 android:layout_height="fill_parent" android:gravity="center_horizontal" 26 android:orientation="vertical"> 27 <RadioGroup android: 28 android:layout_width="166px" android:layout_height="98px" 29 android:orientation="vertical"> 30 <RadioButton android: 31 android:layout_width="wrap_content" android:layout_height="wrap_content" 32 android:text="RadioButton"> 33 </RadioButton> 34 <RadioButton android: 35 android:layout_width="wrap_content" android:layout_height="wrap_content" 36 android:text="RadioButton"> 37 </RadioButton> 38 </RadioGroup> 39 40 </LinearLayout> 41 </FrameLayout>
第二种方式,不继承TabActivity,在布局文件中定义TabHost即可,但是TabWidget的id必须是@android:id/tabs,FrameLayout的id必须是@android:id/tabcontent。
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:andro 3 android: 4 android:orientation="vertical" 5 android:layout_width="fill_parent" 6 android:layout_height="fill_parent"> 7 <TabHost android: 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content"> 10 <LinearLayout 11 android:orientation="vertical" 12 android:layout_width="fill_parent" 13 android:layout_height="fill_parent"> 14 15 <TabWidget android: 16 android:orientation="horizontal" 17 android:layout_width="fill_parent" 18 android:layout_height="wrap_content"> 19 </TabWidget> 20 21 <FrameLayout android: 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content"> 24 <TextView android: 25 android:layout_width="fill_parent" 26 android:layout_height="fill_parent" android:text="Tab1"/> 27 <TextView android: 28 android:layout_width="fill_parent" 29 android:layout_height="fill_parent" android:text="Tab2"/> 30 <TextView android: 31 android:layout_width="fill_parent" 32 android:layout_height="fill_parent" android:text="Tab3"/> 33 </FrameLayout> 34 35 </LinearLayout> 36 </TabHost> 37 </LinearLayout>
mainActivity
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.main); 5 6 TabHost tabHost = (TabHost) findViewById(R.id.tabhost); 7 tabHost.setup(); 8 TabWidget tabWidget = tabHost.getTabWidget(); 9 10 tabHost.addTab(tabHost 11 .newTabSpec("tab1") 12 .setIndicator("tab1", 13 getResources().getDrawable(R.drawable.img01)) 14 .setContent(R.id.view1)); 15 16 tabHost.addTab(tabHost 17 .newTabSpec("tab2") 18 .setIndicator("tab2", 19 getResources().getDrawable(R.drawable.img02)) 20 .setContent(R.id.view2)); 21 22 tabHost.addTab(tabHost 23 .newTabSpec("tab3") 24 .setIndicator("tab3", 25 getResources().getDrawable(R.drawable.img03)) 26 .setContent(R.id.view3));