Android TabHost的两种使用方法

智能移动设备的操作会受限于屏幕的尺寸。一些有关GUI优化技巧不提倡在单独的Activity中显示过多的元素,比较简单的解决办法是将其拆分成多个Activities,每个部分都单独调用。尽管这样解决了表面问题,但是却出现了额外的麻烦,尤其是针对某些内聚属性较高的操作,这样会降低操作的流畅性。

这里介绍一种比较“温馨”的解决方法,应用Widget.TabHost将多个Activities合并成一个Activity,这样就可以同时解决两个问题:

 

1)        避免单一Activity包含过多元素而过于臃肿,

2)        而且也解决了将复杂的Activities拆分后,降低了拆分“强内聚”而影响到系统的整体性。

对于有经验的朋友会非常容易了解下边例子中包含的方法所代表的作用,那么对于刚刚接触人可以将TabHost理解成类似于浏览器中用来索引不同页面的Tab标签,接下来分析实际的例子。

定义layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

android:layout_width
="fill_parent"

android:layout_height
="fill_parent">

<!-- androidres.com -->

<TabHost

android:id="@+id/tabhost"

android:layout_width
="fill_parent"

android:layout_height
="fill_parent">


<TabWidget

android:id="@android:id/tabs"

android:layout_width
="fill_parent"

android:layout_height
="105px"/>


<FrameLayout

android:id="@android:id/tabcontent"

android:layout_width
="fill_parent"

android:layout_height
="fill_parent"

android:paddingTop
="65px">

<LinearLayout

android:id="@+id/tab1content"

android:orientation
="vertical"

android:layout_width
="fill_parent"

android:layout_height
="fill_parent"

android:background
="#00008B">



<!-- Put Tab 1 Views in here -->

</LinearLayout>



<LinearLayout

android:id="@+id/tab2content"

android:orientation
="vertical"

android:layout_width
="fill_parent"

android:layout_height
="fill_parent"

android:background
="#FFFF00">



<!-- Put Tab 2 Views in here -->



</LinearLayout>

</FrameLayout>

</TabHost>

</LinearLayout>


例子中的LinearLayout作为每个独立标签(TabHost.TabSec)所包含的内容:

 

1.tabSec.setContent(R.id.tab1content);

 

 同时也可以直接将Intent实体作为参数,这样可以将外部的Activity类作为当前类实体的一部分:

 

1.tabSec.setContent(new Intent(this, Tab1Activity.class)));

 

 下边分别是两种用于主程序中初始化TabHost的方法,请根据实际的需要选择恰当的处理方式:

 

1)应用TabSpec分割Activity内部Layout元素(对应于上边的Layout实例):

TabHost tabs = (TabHost)this.findViewById(R.id.tabhost);

tabs.setup();

TabHost.TabSpec one = tabs.newTabSpec("one");

one.setContent(R.id.tab1content);

one.setIndicator("TAB 1");

tabs.addTab(one);

 

2)将多个Activity类整合到同一个Activity中:

TabHost host = getTabHost();

host.addTab(host.newTabSpec("one").setIndicator("TAB1").setContent(new Intent(this, Tab1Activity.class)));

host.addTab(host.newTabSpec("two").setIndicator("TAB2").setContent(new Intent(this, Tab2Activity.class)));

 

其中的Tab1Activity和Tab2Activity分别是两个独立的Activity类,上边的例子中所声明的实体将被植入TabSpec中。

tabHost = getTabHost();

String id = this.getIntent().getExtras().getString("CustomerID");

Intent icustom = new Intent(this, fm_Custom_Info.class);

icustom.putExtra("CustomerID", id);



Intent iInterview = new Intent(this, fm_Custom_Interview.class);

iInterview.putExtra("CustomerID", id);



Intent icusExtends = new Intent(this, fm_Custom_Extends.class);

icusExtends.putExtra("CustomerID", id);



LayoutInflater.from(this).inflate(R.layout.fm_custom_page,

tabHost.getTabContentView(), true);

tabHost.addTab(tabHost.newTabSpec("TabC_1").setIndicator("第一个")

.setContent(icustom));

tabHost.addTab(tabHost.newTabSpec("TabC_2").setIndicator("第二个")

.setContent(iInterview));

tabHost.addTab(tabHost.newTabSpec("TabC_3").setIndicator("第三个")

.setContent(icusExtends));




 

转载于:https://www.cnblogs.com/cuijingyi0112/archive/2011/12/22/2297922.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值