欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-18 17:02:22
本文实例讲述了android编程实现自定义tab选项卡功能。分享给大家供大家参考,具体如下: import android.app.tabactivity; i...

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

import android.app.tabactivity;
import android.content.intent;
import android.os.bundle;
import android.widget.*;
import android.widget.tabhost.ontabchangelistener;
import android.os.build;
import android.view.view;
import java.lang.reflect.field;
import android.view.layoutinflater;
public class testtabactivity extends tabactivity {
 /** called when the activity is first created. */
   @override
   public void oncreate(bundle savedinstancestate) {
     super.oncreate(savedinstancestate);
     int width =45;
     int height =48;
     final tabhost tabs = gettabhost();
     final tabwidget 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(new intent(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 (int i =0; i < tabwidget.getchildcount(); i++) {
       /**
       * 设置高度、宽度,不过宽度由于设置为fill_parent,在此对它没效果
       */
       tabwidget.getchildat(i).getlayoutparams().height = height;
       tabwidget.getchildat(i).getlayoutparams().width = width;
     /**
      * 设置tab中标题文字的颜色,不然默认为黑色
      */
      final textview 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(new ontabchangelistener(){
  @override
  public void ontabchanged(string tabid) {
   // todo auto-generated method stub
   for (int i =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));
   }
   }
  }});
   }
}

更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android编程之activity操作技巧总结》、《android资源操作技巧汇总》、《android文件操作技巧汇总》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android编程开发之sd卡操作方法汇总》、《android视图view技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。

上一篇:

下一篇: