Android学习备忘001——Tabhost

通常情况下我们会通过继承TabActivity,调用getTabHost()获取TabHost实例,下面是具体过程。

TabHostActivity.java

public class TabHostActivity extends TabActivity {
    private TabHost tabHost;
    private Intent certificateIntent;
    private Intent feeIntent;
    private Intent scoreIntent;
    private Intent studyIntent;
    private Intent moreIntent;
 
    @Override
    publicvoid onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       tabHost = getTabHost();
       initIntent();
       addSpec();
    }
    /**
     * 初始化各个tab标签对应的intent
     */
    privatevoid initIntent() {
       studyIntent = new Intent(this, StudyActivity.class);
       scoreIntent = new Intent(this, ScoreActivity.class);
       feeIntent = new Intent(this, FeeActivity.class);
       certificateIntent = new Intent(this, CertificateActivity.class);
       moreIntent = new Intent(this, MoreActivity.class);
    }
    /**
     * 为tabHost添加各个标签项
     */
    privatevoid addSpec() {
      tabHost.addTab(this.buildTagSpec("tab_study",
R.string.study_progress,R.drawable.account01, studyIntent));
    tabHost.addTab(this.buildTagSpec("tab_score",
R.string.test_score,R.drawable.account02, scoreIntent));
        tabHost.addTab(this.buildTagSpec("tab_fee",
R.string.fee_pay,R.drawable.account03, feeIntent));
       tabHost.addTab(this.buildTagSpec("tab_certificate",  R.string.certificate_grant,R.drawable.accountcertificateIntent));
       tabHost.addTab(this.buildTagSpec("tab_more", R.string.more,
              R.drawable.account05, moreIntent));
    }
    /**
     * 自定义创建标签项的方法
     * @param tagName 标签标识
     * @param tagLable 标签文字
     * @param icon  标签图标
     * @param content 标签对应的内容
     * @return
     */
    private TabHost.TabSpec buildTagSpec(String tagName, int tagLable,
           int icon, Intent content) {
       returntabHost
              .newTabSpec(tagName)
              .setIndicator(getResources().getString(tagLable),
                     getResources().getDrawable(icon)).setContent(content);
    }}
运行结果如下图所示



我们发现标签位置处于界面上方,但是我们看到的很多应用的标签都处于界面底部。

如下图所示



我们要实现这种效果只需要将 TabActivity 的默认布局覆盖 即可。新布局只需将标签和标签对应内容的相对位置调换一下就可以了,这里是用相对布局将标签对应内容的位置放到了标签的上方。不要改动 id (会抛异常,提示必须要用指定的 id )。不要忘了在 onCreate() 里设置新布局将 TabActivity 的默认布局覆盖。

@Override
    publicvoid onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
setContentView(R.layout.tab);
       tabHost = getTabHost();
       initIntent();
       addSpec();
    }

tab.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- TabHost组件id值不可变-->
<TabHostxmlns:android=http://schemas.android.com/apk/res/android
    android:id="@android:id/tabhost"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent">
   
    <RelativeLayout android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent">
      
       <!-- TabWidget组件id值不可变-->
       <TabWidget android:id="@android:id/tabs"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_alignParentBottom="true">
       </TabWidget>
      
       <!-- FrameLayout布局,id值不可变-->
       <FrameLayout android:id="@android:id/tabcontent"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"
           android:layout_above="@android:id/tabs">
       </FrameLayout>
      
    </RelativeLayout>
</TabHost>

通常在项目中我们都会有一个自定义的Activity基类,我们会让所有的界面Activity去继承这个基类。但是要使用TabHost就要继承TabActivity,所以我们可以定义两个基类,一个是普通Activity界面的基类,另一个是包含TabHost界面的基类,让这个基类继承TabActivity即可。

转自http://www.cnblogs.com/wader2011/archive/2011/10/11/2207670.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值