当前位置: 移动技术网 > 移动技术>移动开发>Android > Android编程实现自定义Tab选项卡功能示例

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

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网