zoukankan      html  css  js  c++  java
  • 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即可。

                              作者:xubuhang                出处:http://www.cnblogs.com/xubuhang/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 

     
查看全文
  • 相关阅读:
    深入理解JUC:第五章:CyclicBarrier循环栅栏
    技术汇总:第十八章:枚举的简单使用
    深入理解JUC:第四章:CountDownLatch倒计时器
    java锁:第四章:读写锁
    java锁:第三章:自旋锁
    java锁:第二章:可重入锁和递归锁
    java锁:第一章:公平和非公平锁
    集合线程安全问题:第一章:集合类不安全之并发修改异常
    深入理解JUC:第一章:volatile的三大特性
    深入理解JUC:第二章:CAS:CompareAndSwap底层原理
  • 原文地址:https://www.cnblogs.com/xubuhang/p/3642722.html
  • Copyright © 2011-2022 走看看