一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Android编程实现自定义Tab选项卡功能示例

时间:2017-04-04 编辑:简简单单 来源:一聚教程网

本文实例讲述了Android编程实现自定义Tab选项卡功能。分享给大家供大家参考,具体如下:

 

 代码如下 复制代码

importandroid.app.TabActivity;

importandroid.content.Intent;

importandroid.os.Bundle;

importandroid.widget.*;

importandroid.widget.TabHost.OnTabChangeListener;

importandroid.os.Build;

importandroid.view.View;

importjava.lang.reflect.Field;

importandroid.view.LayoutInflater;

publicclasstestTabActivityextendsTabActivity {

 /** Called when the activity is first created. */

   @Override

   publicvoidonCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     intwidth =45;

     intheight =48;

     finalTabHost tabs = getTabHost();

     finalTabWidget tabWidget = tabs.getTabWidget();

     Field mBottomLeftStrip;

     Field mBottomRightStrip;

     LayoutInflater.from(this).inflate(R.layout.tab_views, tabs.getTabContentView(),true);

     tabs.addTab(tabs.newTabSpec("first tab")

       .setIndicator("信息",getResources().getDrawable(R.drawable.m))

       .setContent(newIntent(testTabActivity.this,OneActivty.class))

       );

     tabs.addTab(tabs.newTabSpec("second tab")

     .setIndicator("收藏",getResources().getDrawable(R.drawable.n))

     .setContent(R.id.content));

     tabs.addTab(tabs.newTabSpec("second tab")

       .setIndicator("设置",getResources().getDrawable(R.drawable.s))

       .setContent(R.id.content));

     for(inti =0; i < tabWidget.getChildCount(); i++) {

       /**

       * 设置高度、宽度,不过宽度由于设置为fill_parent,在此对它没效果

       */

       tabWidget.getChildAt(i).getLayoutParams().height = height;

       tabWidget.getChildAt(i).getLayoutParams().width = width;

     /**

      * 设置tab中标题文字的颜色,不然默认为黑色

      */

      finalTextView tv = (TextView) tabWidget.getChildAt(i).findViewById(android.R.id.title);

      tv.setTextColor(this.getResources().getColorStateList(android.R.color.white));

       /**

       * 此方法是为了去掉系统默认的色白的底角

       *

       * 在 TabWidget中mBottomLeftStrip、mBottomRightStrip

       * 都是私有变量,但是我们可以通过反射来获取

       *

       * 由于还不知道Android 2.2的接口是怎么样的,现在先加个判断好一些

       */

     if(Float.valueOf(Build.VERSION.RELEASE) <=2.1) {

        try{

          mBottomLeftStrip = tabWidget.getClass().getDeclaredField ("mBottomLeftStrip");

          mBottomRightStrip = tabWidget.getClass().getDeclaredField ("mBottomRightStrip");

          if(!mBottomLeftStrip.isAccessible()) {

           mBottomLeftStrip.setAccessible(true);

          }

          if(!mBottomRightStrip.isAccessible()){

           mBottomRightStrip.setAccessible(true);

          }

         mBottomLeftStrip.set(tabWidget, getResources().getDrawable (R.drawable.no));

         mBottomRightStrip.set(tabWidget, getResources().getDrawable (R.drawable.no));

        }catch(Exception e) {

         e.printStackTrace();

        }

     }else{

     /**

     * 不做任何处理

     */

     }

     View vvv = tabWidget.getChildAt(i);

  if(tabs.getCurrentTab()==i){

      vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_button));

  }

  else{

      vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.bar));

  }

     }

     /**

     * 当点击tab选项卡的时候,更改当前的背景

     */

     tabs.setOnTabChangedListener(newOnTabChangeListener(){

  @Override

  publicvoidonTabChanged(String tabId) {

   // TODO Auto-generated method stub

   for(inti =0; i < tabWidget.getChildCount(); i++) {

   View vvv = tabWidget.getChildAt(i);

   if(tabs.getCurrentTab()==i){

       vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_button));

   }

   else{

       vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.bar));

   }

   }

  }});

   }

}

 

热门栏目