效果圖:
核心代碼:
public class tabUtils {
static int sActiveTabIndex = -1;
static boolean updateTabState(Activity a,int hightlight){
boolean isActive=false;
final TabWidget tw=(TabWidget) a.findViewById(R.id.widgetbus);
for(int i=0;i<tw.getChildCount();i++){
View v=tw.getChildAt(i);
if(v.getId()==hightlight)
{
isActive=true;
tw.setCurrentTab(i);
sActiveTabIndex=i;
}
v.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
processtabclick((Activity)tw.getContext(),v,tw.getChildAt(sActiveTabIndex).getId());
}
});
v.setOnFocusChangeListener( new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if(hasFocus){
for(int i=0;i<tw.getChildCount();i++){
if(v==tw.getChildTabViewAt(i))
tw.setCurrentTab(i);
processtabclick((Activity)tw.getContext(),v,tw.getChildAt(sActiveTabIndex).getId());
break;
}
}
}
});
}
return true;
}
static void processtabclick(Activity a,View v,int curent){
int id=v.getId();
if(v.getId()==curent)
{
return;
}
activetab(a,id);
}
static void activetab(Activity a,int id){
Intent intent=new Intent();
switch(id)
{
case R.id.text1:
intent.setClass(a, TabWidgteTest.class);
break;
case R.id.text2:
intent.setClass(a, activity2.class);
break;
case R.id.text3:
intent.setClass(a, activity3.class);
break;
case R.id.text4:
intent.setClass(a, activity4.class);
break;
default:
return;
}
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
a.startActivity(intent);
a.finish();
a.overridePendingTransition(0, 0);
}
}
原理分析:在TabWidget中加入四個TextView,在每個TextView上綁定OnClickListener監聽器,
當有OnClick事件時,會判斷點擊的View是否是focus的,如果不是則啓動點擊的item所代表的activity。