在使用TabHost的时候有一个非常需要注意的地方:
注意布局文件中的TabWidget的id必须定义为:android:id="@android:id/tabs",
FrameLayout的id必须定义为:android:id="@android:id/tabcontent" ,Activity中要继承自FragmentActivity类,
其它控件没有限制,否则报错。
在AndroidStudio中调试了一个简单的demo:
TabHostActivity.class:
package com.othershe.test;
import android.os.Bundle; import android.support.v4.app.FragmentTabHost; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.TextView; public class TabHostActivity extends FragmentActivity implements View.OnClickListener{ private int images[] = new int[] {R.drawable.tab_1_selector, R.drawable.tab_2_selector,1, R.drawable.tab_4_selector, R.drawable.tab_5_selector }; private Class[] clas = new Class[] {BlankFragment.class, BlankFragment.class, BlankFragment.class, BlankFragment.class, BlankFragment.class }; private ImageView main_image_center; private TextView main_tv_final; private TextView mBottom_center; private FragmentTabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tab_host); initUI(); } private void initUI() { //底部中间按钮控件 main_image_center = (ImageView) findViewById(R.id.main_image_center); main_tv_final = (TextView) findViewById(R.id.main_tv_final); main_image_center.setImageResource(R.mipmap.circle); mBottom_center = (TextView) findViewById(R.id.main_tv_final); main_image_center.setOnClickListener(this); mBottom_center.setOnClickListener(this); main_tv_final.setOnClickListener(this); String [] tabIndicatorArray = getResources().getStringArray(R.array.arr_tab_indicator); mTabHost = (FragmentTabHost)findViewById(R.id.tabhost); mTabHost.setup(this,getSupportFragmentManager(),R.id.content); LayoutInflater inflater = getLayoutInflater(); for (int i= 0 ;i<images.length;i++){ View indicatorView = inflater.inflate(R.layout.list_item_viewpagerindicator,null); TextView tvIndicator = (TextView) indicatorView.findViewById(R.id.tv_title_indicator); tvIndicator.setText(tabIndicatorArray[i]); ImageView imageView = (ImageView) indicatorView.findViewById(R.id.image_indicator); imageView.setImageResource(images[i]); //imageView.setImageResource(R.drawable.tab_1_selector); mTabHost.addTab(mTabHost.newTabSpec("tab"+i).setIndicator(indicatorView), clas[i], null); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.main_image_center: mTabHost.setCurrentTab(2); break; case R.id.main_tv_final: mTabHost.setCurrentTab(2); break; default: break; } } }
activity_tab_host.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.othershe.test.TabHostActivity"> <android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0"/> <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="45dp" android:divider="#00000000" android:background="#F5f5f5" android:gravity="center" android:layout_weight="0" /> </LinearLayout> </android.support.v4.app.FragmentTabHost> <ImageView android:id="@+id/main_image_center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="17dp" android:layout_centerInParent="true" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/main_tv_final" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:layout_marginBottom="2dp" android:layout_centerInParent="true" android:text="金融圈" android:textSize="12sp" android:textColor="#e5e5" /> </RelativeLayout>
list_item_viewpagerindicator<?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="match_parent" > <ImageView android:id="@+id/image_indicator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:src="@mipmap/ic_launcher" android:layout_marginTop="5dp" /> <TextView android:id="@+id/tv_title_indicator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/image_indicator" android:layout_centerHorizontal="true" android:text="家园" android:textSize="12sp" android:gravity="center"
android:textAppearance="?android:attr/textAppearanceLarge" /></RelativeLayout>android:textColor="@color/main_tabtextcolor"
tab_1_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
tab_2_selector.xml:<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@mipmap/home_pre" /> <item android:state_pressed="true" android:drawable="@mipmap/home_pre" /> <item android:state_selected="false" android:drawable="@mipmap/home" /> </selector>
<?xml version="1.0" encoding="utf-8"?>
tab_4_selector.xml:<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@mipmap/message_pre" /> <item android:state_pressed="true" android:drawable="@mipmap/message_pre" /> <item android:state_selected="false" android:drawable="@mipmap/message" /> </selector>
<?xml version="1.0" encoding="utf-8"?>
tab_5_selector.xml:<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@mipmap/found_pre" /> <item android:state_pressed="true" android:drawable="@mipmap/found_pre" /> <item android:state_selected="false" android:drawable="@mipmap/found" /> </selector>
<?xml version="1.0" encodin
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="#af0000"/> <item android:color="#999999"/> </selector>
g="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@mipmap/mine_pre" /> <item android:state_pressed="true" android:drawable="@mipmap/mine_pre" /> <item android:state_selected="false" android:drawable="@mipmap/mine" /> </selector>
main_tabtextcolro.xml
05-10