Android——FragmentTabHost-快速实现底部导航模式的解决方案

FragmentTabHost联合Fragment可以方便的实现导航页面模式。
下面再代码中简介:

activity.xml

"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    "@+id/container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    

    "@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#33b5e5"
        >
        
    


fragment.xml

"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="#6998bb"
              android:orientation="vertical">



其中一个Fragment.java示例,其它都一样

public class Fragment1 extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_tabpager1,container,false);
    }
}

activity.java

public class HomeActivity extends FragmentActivity {

    private FragmentTabHost mFragmentTabHost;
    private FrameLayout container;
    private String[] tabTitles;
    private Class[] fragments;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        initView();

    }

    private void initView() {
        mFragmentTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
        //相当于是初始化FragmentTabHost,重要参数就是FragmentManager了,它用于后面自动创建Fragment
        //第三个参数如果不指定的话,它将用自带的容器来装页面
        mFragmentTabHost.setup(this,getSupportFragmentManager(),R.id.container);
        container = (FrameLayout) findViewById(R.id.container);

        tabTitles = new String[]{"附近", "热门", "探索", "我的"};
        //创建一个Fragment集合
        fragments = new Class[]{Fragment1.class, Fragment2.class, Fragment3.class, Fragment4.class};

        for (int i = 0; i < fragments.length; i++) {
            //创建导航标签
            TabHost.TabSpec tabSpec = mFragmentTabHost
                    //获得一个TabSpec,参数它的标签,
                    // 通过调用mFragmentTabHost.getCurrentTabTag()可以获得当前标签
                    .newTabSpec(tabTitles[i])
                    //指定一个View作为该Tab的指示器,这个View可以是任意的
                    .setIndicator(getIndicator(i));
            //为FragmentTabHost添加一个Fragment,它可以根据类名自动创建Fragment,
            //最后一个参数Bundle是被FragmentTabHost内部的TabInfo所持有的,
            //当然与TabSpec对应的Fragment的tag就是该TagSpec的tag
            mFragmentTabHost.addTab(tabSpec, fragments[i], null);
            //通过这个方法可以获得对应位置的Tab的View,然后给他设置背景选择器
            mFragmentTabHost.getTabWidget().getChildAt(i)
                    .setBackgroundResource(R.drawable.selector_tab_background);
            //这个方法可以设置分隔线,null为没有分隔线
            mFragmentTabHost.getTabWidget().setDividerDrawable(null);
        }
    }

    /**
     * 获取背景选择器
     * @param position tab的位置
     * @return
     */
    private View getIndicator(int position) {
        View view = LayoutInflater.from(this).inflate(R.layout.item_tab, null);
        ImageView imageView = (ImageView) view.findViewById(R.id.iv_tabImage);
        imageView.setImageResource(R.drawable.cat);
        TextView textView = (TextView) view.findViewById(R.id.tv_tabTitle);
        textView.setText(tabTitles[position]);
        return view;
    }
}

效果图:
Android——FragmentTabHost-快速实现底部导航模式的解决方案_第1张图片

你可能感兴趣的:(Android—基础部分)