FragmentTabHost使用

5809 ワード

1.レイアウトインプリメンテーション上がfragment下がbuttonの(デフォルトは上に切り替わる)FragmentTabHost小包のFrameLayoutも書き、表示させないで、FragmentTabHost内のすべてのidもシステムのidを使う
<?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/<span style="font-family: Arial, Helvetica, sans-serif;">activity_home_container</span><span style="font-family: Arial, Helvetica, sans-serif;">"</span>
        android:layout_width="match_parent"
        android:layout_height="0dp"
        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
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:background="#FFF1F1F1" />

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0" />
    </android.support.v4.app.FragmentTabHost>

</LinearLayout>

2.コード呼び出し、FragmentActivityを継承する必要がある
// 1.    TabHost
		tabhost = (FragmentTabHost) findViewById(android.R.id.tabhost);
		tabhost.setup(this, getSupportFragmentManager(),
				R.id.activity_home_container);

		// 2.   TabSpec
		TabSpec spec = tabhost.newTabSpec(TAB_CHAT);
		chatIndicator = new TabIndicatorView(this);
		chatIndicator.setTabTitle("  ");
		chatIndicator.setTabIcon(R.drawable.tab_icon_chat_normal,
				R.drawable.tab_icon_chat_focus);
		spec.setIndicator(chatIndicator);

		// 3.   TabSpec
		tabhost.addTab(spec, ChatFra.class, null);

		// 2.   TabSpec
		spec = tabhost.newTabSpec(TAB_CONTACT);
		contactIndicator = new TabIndicatorView(this);
		contactIndicator.setTabIcon(R.drawable.tab_icon_contact_normal,
				R.drawable.tab_icon_contact_focus);
		contactIndicator.setTabTitle("   ");
		contactIndicator.setTabUnreadCount(10);
		spec.setIndicator(contactIndicator);
		// 3.   TabSpec
		tabhost.addTab(spec, ContactFra.class, null);

		// 2.   TabSpec
		spec = tabhost.newTabSpec(TAB_DISCOVER);
		discoverIndicator = new TabIndicatorView(this);
		discoverIndicator.setTabIcon(R.drawable.tab_icon_discover_normal,
				R.drawable.tab_icon_discover_focus);
		discoverIndicator.setTabTitle("  ");
		discoverIndicator.setTabUnreadCount(10);
		spec.setIndicator(discoverIndicator);
		// 3.   TabSpec
		tabhost.addTab(spec, DiscoverFra.class, null);

		// 2.   TabSpec
		spec = tabhost.newTabSpec(TAB_ME);
		meIndicator = new TabIndicatorView(this);
		meIndicator.setTabIcon(R.drawable.tab_icon_me_normal,
				R.drawable.tab_icon_me_focus);
		meIndicator.setTabTitle(" ");
		meIndicator.setTabUnreadCount(10);
		spec.setIndicator(meIndicator);
		// 3.   TabSpec
		tabhost.addTab(spec, MeFra.class, null);

		//      
		tabhost.getTabWidget().setDividerDrawable(android.R.color.white);

		//     tab  
		tabhost.setCurrentTabByTag(TAB_CHAT);
		chatIndicator.setTabSelected(true);

		//   tab     
		tabhost.setOnTabChangedListener(this);

	}

	@Override
	public void onTabChanged(String tag) {
		chatIndicator.setTabSelected(false);
		contactIndicator.setTabSelected(false);
		discoverIndicator.setTabSelected(false);
		meIndicator.setTabSelected(false);

		if (TAB_CHAT.equals(tag)) {
			chatIndicator.setTabSelected(true);
		} else if (TAB_CONTACT.equals(tag)) {
			contactIndicator.setTabSelected(true);
		} else if (TAB_DISCOVER.equals(tag)) {
			discoverIndicator.setTabSelected(true);
		} else if (TAB_ME.equals(tag)) {
			meIndicator.setTabSelected(true);
		}
	}
3.カスタムTabIndicator
public class TabIndicatorView extends RelativeLayout {
	private ImageView ivTabIcon;
	private TextView tvTabHint;
	private TextView tvTabUnRead;

	private int normalIconId;
	private int focusIconId;

	public TabIndicatorView(Context context) {
		this(context, null);
	}

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

		//              
		View.inflate(context, R.layout.tab_indicator, this);

		ivTabIcon = (ImageView) findViewById(R.id.tab_indicator_icon);
		tvTabHint = (TextView) findViewById(R.id.tab_indicator_hint);
		tvTabUnRead = (TextView) findViewById(R.id.tab_indicator_unread);//    
		
		setTabUnreadCount(0);
	}

	//   tab title
	public void setTabTitle(String title) {
		tvTabHint.setText(title);
	}

	public void setTabTitle(int titleId) {
		tvTabHint.setText(titleId);
	}

	//      
	public void setTabIcon(int normalIconId, int focusIconId) {
		this.normalIconId = normalIconId;
		this.focusIconId = focusIconId;

		ivTabIcon.setImageResource(normalIconId);
	}

	//      
	public void setTabUnreadCount(int unreadCount) {
		if (unreadCount <= 0) {
			tvTabUnRead.setVisibility(View.GONE);
		} else {
			if (unreadCount <= 99) {
				tvTabUnRead.setText(unreadCount + "");
			} else {
				tvTabUnRead.setText("99+");
			}

			tvTabUnRead.setVisibility(View.VISIBLE);
		}
	}

	//     
	public void setTabSelected(boolean selected) {
		if (selected) {
			ivTabIcon.setImageResource(focusIconId);
		} else {
			ivTabIcon.setImageResource(normalIconId);
		}
	}
}