前提:
关于TabActivity的介绍,已经很多了,对于动态改变TabActivity标签的图片的介绍也有很多,但是大部分都是去监听tabchange事件,代码量大,一不小心就会把图片写错位置,需要很细心才行。我在做Contacts通讯录得时候,不小心发现了天机,只需要在XML文件里配置下即可,工作量也少了很多。下面就把这两种方法再详细的介绍给大家。这两种方法各有各的好处,还要根据情况大家自己选择。
第一种:OnTabChangeListener监听tab改变
网上介绍的很多,原理就是获得TabActivity的TabHost的TabWidget,然后改变TabWidget的布局中的android.R.id.icon的ImageView的图片资源!下面把示例代码贴出来,大家看下就明白了。
一个TabWidget可以add多个tab,mTabHost.getTabWidget().getChildAt(int index).index是从0开始,从左到右依次+1。
我定义了两个hashmap去存储各个tab对应的选中和未选中时的现实的图片的id。变量last对应上一个显示的tab的tabid(Tabhost.newTabSpec(String tabid),在onTabChanged(String tabid)只会将tabid传过来),我new的时候将tabid对应成index的对应的字符串,在处理的时候方便。具体看onTabChanged方法。
这种方法虽然复杂,但是可以满足更复杂的需求,比如去更改tab的显示布局,都是可以的,如果只是区分当前的tab与其他tab,还是看第二种方法更简单易懂。
第二种:配置XML
只需要在drawable文件夹下面定义一个name.xml,具体内容如下。定义selector 标签,大家自己看标签属性名字就知道各个属性代表的意思了吧,什么都不填默认是unselected状态。java代码只需要setIndicator(getText(R.string.text),getResources().getDrawable(R.drawable.name))。
这种方法简单,但是不能去改变tab的布局,满足一般的区分当前显示的tab与其他tab还是可以的。
java代码: