最近在学TabHost时发现TabActivity在API level 13以后不用了,所以就去寻找它的替换类,找到FragmentActivity,可以把每个Fragment作为子tab添加到FragmentActivity上。tab可以放在最上面也可以放在最下面

 

由以下布局文件main.xml<FrameLayout>的位置决定
 
[html]  
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:orientation="vertical">  
      
    <!-- 这个布局决定了标签在上面还是在下面显示 -->  
    <FrameLayout   
        android:id="@+id/realtabcontent"  
        android:layout_width="match_parent"  
        android:layout_height="0dip"  
        android:layout_weight="1" />  
      
    <android.support.v4.app.FragmentTabHost  
        android:id="@android:id/tabhost"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content">  
     
<!--  有時添加TabWidget 會 報錯 -->    
        <TabWidget   
            android:id="@android:id/tabs"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:orientation="horizontal"/>  
    </android.support.v4.app.FragmentTabHost>  
      
</LinearLayout>  
 
 创建一个类继承FragmentActivity

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabHost.TabSpec;

public class MainActivity extends FragmentActivity implements OnTabChangeListener {

private final static String TAG_CHAT = "chat";
private final static String TAG_CONTACT = "contact";
private FragmentTabHost tablehost;

private TabIndicator chatIndicator;
private TabIndicator contactIndicator;
private TabSpec spec;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tablehost = (FragmentTabHost) findViewById(android.R.id.tabhost);
tablehost.setup(this, getSupportFragmentManager(), R.id.activity_home_container);

//设置 消息tab
spec = tablehost.newTabSpec(TAG_CHAT);
chatIndicator = new TabIndicator(this);
chatIndicator.setTabTitle("消息");
chatIndicator.setTabIcon(R.drawable.tab_icon_chat_normal, R.drawable.tab_icon_chat_focus);
spec.setIndicator(chatIndicator);
// spec.setIndicator("消息");
tablehost.addTab(spec, Myfragment1.class, null);

//设置 通讯tab
spec = tablehost.newTabSpec(TAG_CONTACT);
contactIndicator = new TabIndicator(this);
contactIndicator.setTabTitle("通讯");
contactIndicator.setTabIcon(R.drawable.tab_icon_contact_normal, R.drawable.tab_icon_contact_focus);
spec.setIndicator(contactIndicator);
// spec.setIndicator("通讯");
tablehost.addTab(spec, Myfragment2.class, null);

tablehost.setCurrentTabByTag(TAG_CHAT);
chatIndicator.setSelectTab(true);

//去掉分割线
tablehost.getTabWidget().setDividerDrawable(android.R.color.white);
//设置tabhost的选中事件
tablehost.setOnTabChangedListener(this);

}
@Override
public void onTabChanged(String tag) {
chatIndicator.setSelectTab(false);
contactIndicator.setSelectTab(false);

if (TAG_CHAT.equals(tag)) {
chatIndicator.setSelectTab(true);
}else if(TAG_CONTACT.equals(tag)){
contactIndicator.setSelectTab(true);
}

}


}

 

写一个自定义控件TabIndicatorView  通过Tabspec  添加

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class TabIndicator extends RelativeLayout {
private ImageView IvTabicon;
private TextView tvTabHint;
// private TextView tvTabUnread;
private int normalIconId;
private int focusIconId;

public TabIndicator(Context context) {
    this(context,null);                        需要注意  由super改成this  
}

public TabIndicator(Context context, AttributeSet attrs) {
super(context, attrs);

//绑定布局
View.inflate(context, R.layout.tab_indicator, this);
tvTabHint=(TextView) findViewById(R.id.tab_indicator_hint);
IvTabicon=(ImageView) findViewById(R.id.tab_indicator_icon);
// tvTabUnread=(TextView) findViewById(R.id.tab_indicator_unread);
}

/**
* 设置TAB title
* @param title
*/
public void setTabTitle(String title){
tvTabHint.setText(title);
}
public void setTabTitle(int titleId){
tvTabHint.setText(titleId);
}

/**
* 设置tab icon
* @param normalIconId
* @param focusIconId
*/
public void setTabIcon(int normalIconId,int focusIconId){
this.normalIconId = normalIconId;
this.focusIconId = focusIconId;

IvTabicon.setImageResource(normalIconId);

}


public void setSelectTab(boolean select){
if (select) {
IvTabicon.setImageResource(focusIconId);
}else{
IvTabicon.setImageResource(normalIconId);
}
}

TabIndicatorView布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="54dip"
android:layout_marginLeft="-3dip"
android:layout_marginRight="-3dip"
android:layout_weight="1" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >

<ImageView
android:id="@+id/tab_indicator_icon"
android:layout_width="34dp"
android:layout_height="34dp"
android:contentDescription="@null"
android:src="@drawable/tab_icon_me_normal" />

<TextView
android:id="@+id/tab_indicator_hint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="aaaa"
android:textSize="12sp" />
</LinearLayout>

</RelativeLayout>

 

子Fragment:::::

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Myfragment1 extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view= inflater.inflate(R.layout.fragment1, container, false);
Log.d("", "view");



return view;
}

}