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

activity.xml<?xml version="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<?xml version="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.javapublic 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;    }}

效果图:

更多相关文章

  1. 【COCOS2DX-ANDROID-游戏开发之二三】 界面中嵌入Android的WebVi
  2. Android(安卓)App 隐藏显示标题栏、状态栏、导航栏
  3. ListView 样式自定义
  4. android沉浸式全屏显示
  5. 8、NFC技术:让Android自动打开网页
  6. 获取Android设备屏幕的相关参数
  7. Flutter 基础(二)基本组件ListView
  8. android 样式选择器
  9. Android-NDK开发之基础--Android(安卓)JNI实例代码(四)-- JNI中

随机推荐

  1. golang slice如何拷贝
  2. golang map无法删除元素吗
  3. golang如何传不定参数
  4. golang slice检查元素是否存在
  5. golang map是否有顺序
  6. golang不用指针可以吗
  7. golang sleep为什么没有返回值
  8. golang map判断key是否存在
  9. golang不能隐式转换吗
  10. golang select不阻塞吗