为什么80%的码农都做不了架构师?>>>   

TabLayout 与 FragmentTabHost

Android提供实现Tab样式的控件大致有TabActivity、FragmentTabHost、TabLayout。而TabActivity已经过时,这里就不在多说,主要提 一下Tablayout与FragmentTabHost这两个

FragmentTabHost针对Fragment管理来进行界面切换,FragmentTabHost本身提供FragmentManager来管理Fragment。
TabLayout则倾向与ViewPager配合使用,可以支持手势来切换界面。也可以模仿FragmentTabHost利用Fragment来管理界面切换

FragmentTabHost:
 布局代码:
 <!--TabHost布局-->
 <?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"
     >
     <!--Toolbar-->
     <include
         android:id="@+id/title_bar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         layout="@layout/toolbar_view"
         />
     <!--Fragment 容器-->
     <FrameLayout
         android:id="@+id/main_tab_host_context"
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="1.0"/>
     <!--Tab与Fragment分割线-->
     <View
         android:layout_width="match_parent"
         android:layout_height="2px"
         android:background="@color/divider_line_color"
         />
     <!--Tab布局-->
     <android.support.v4.app.FragmentTabHost
         android:layout_marginTop="4dp"
         android:id="@+id/bottom_tab_host"
         android:layout_width="match_parent"
         android:layout_height="wrap_content" />
 </LinearLayout>

<!--Indicator布局-->
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:gravity="center"
     android:orientation="vertical"
     >
     <ImageView
         android:id="@+id/indicator_icon"
         android:layout_width="@dimen/main_tab_width"
         android:layout_height="@dimen/main_tab_height"
         android:src="@mipmap/apple"
         android:layout_gravity="center"
         />
     <TextView
         android:id="@+id/indicator_text"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:text="@string/Apple"
         android:textColor="@color/tab_text_default_color"
         android:layout_gravity="center"
         />
 </LinearLayout>

Java代码
 //初始化Tab
 private void initTab() {
  //获取TabHost
        FragmentTabHost mFragmentTabHost = (FragmentTabHost) findViewById(R.id.bottom_tab_host);
        //该方法必须调用,用于初始化FragmentTabHost
        mFragmentTabHost.setup(TabActivity.this, getSupportFragmentManager(), R.id.main_tab_host_context);
        TabEnum[] tabEnums = TabEnum.values();
        for(TabEnum tabEnum : tabEnums) {
         //初始化Indicator
            View indicator = LayoutInflater.from(getApplicationContext()).inflate(R.layout.indicator_tab, null);
            //设置显示文本
            TextView tv = (TextView) indicator.findViewById(R.id.indicator_text);
            tv.setText(getResources().getString(tabEnum.getName()));
            //设置显示图标
            ImageView iv = (ImageView) indicator.findViewById(R.id.indicator_icon);
            iv.setImageResource(tabEnum.getIcon());
            //创建Tab,并设置Indicator
            TabHost.TabSpec tabSpec= mFragmentTabHost.newTabSpec(getResources().getString(tabEnum.getName())).setIndicator(indicator);
            //添加Tab到TabHost
            mFragmentTabHost.addTab(tabSpec, tabEnum.getClz(), null);
        }
    }

TabLayout:
 布局代码:
 <?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"
     >

<android.support.design.widget.TabLayout
         android:id="@+id/top_tab"
         android:layout_width="match_parent"
         android:layout_height="wrap_content" />

<android.support.v4.view.ViewPager
         android:id="@+id/tab_viewpager"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />

</LinearLayout>

Java代码:
 private void initToptab() {
  //创建TopLayout
        TabLayout tabLayout = (TabLayout) rootView.findViewById(R.id.top_tab);
        //创建ViewPager
        mViewPager = (ViewPager) rootView.findViewById(R.id.tab_viewpager);
        //创建PagerAdapter
        adapter = new TabViewPagerAdapter(getActivity());       
        mViewPager.setAdapter(adapter);
        //关键的语句,将ViewPager与TabLayout关联(Tab title在adapter中设置,Pager Title)
        tabLayout.setupWithViewPager(mViewPager);

//使用自定义Tab
        int tabs = tabLayout.getTabCount();
        for(int i = 0; i < tabs; i++) {
            TabLayout.Tab tab = tabLayout.getTabAt(i);
            View view = LayoutInflater.from(getActivity()).inflate(R.layout.indicator_tab, null, false);
            tab.setCustomView(view);

}
       
    }

PagerAdapter与直接使用ViewPager相同,重写getPagerTitle(int position) 方法,为Tab设置title
    @Override
    public CharSequence getPageTitle(int position) {
        return pagers[position].getName();
    }

转载于:https://my.oschina.net/smuswc/blog/599633

TabLayout 与 FragmentTabHost相关推荐

  1. FragmentTabHostUnderLineDemo【FragmentTabHost带下划线】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用FragmentTabHost实现顶部选项卡(带下划线效果)展现. 效果图 代码分析 1.该Demo中采用的是FragmentT ...

  2. android 4个点矫正不规则矩形_Android使用FragmentTabHost实现中间按钮凸出效果

    目前很多app主页都是由几个tab页组成,所以我们开发app的时候一般都会涉及到主页tab的切换实现.常用的主页tab切换实现可以用viewpage和FragmentActivity组合,用普通But ...

  3. 一行代码实现底部导航栏TabLayout

    欢迎关注公众号:JueCode app中底部导航栏已经是很常见的控件了,比如微信,简书,QQ等都有这类控件,都是点击底部标签切换界面.主要的实现手段有 RadioGroup FragmentTabLa ...

  4. java怎么设置按钮凹凸状态,FragmentTabHost实现中间按钮凸出效果

    目前很多app主页都是由几个tab页组成,所以我们开发app的时候一般都会涉及到主页tab的切换实现.常用的主页tab切换实现可以用viewpage和FragmentActivity组合,用普通But ...

  5. TabLayout的指示器长度 的问题

    刚开始效果图 修改后的效果图 这个效果实现 就是在 tablayout 的xml 里面添加 app:tabIndicatorFullWidth="false"

  6. TabLayout 在宽屏幕上tab不能平均分配的问题解决

    TabLayout 在屏幕比较宽的屏幕上的时候 ,不如平板,特质的屏幕的时候 tabMode="fixed" 这个时候就是失效了 显示失效了 是居中的效果 这个修改方法就是在xml ...

  7. Tablayout 多个界面使用一个fragment 的实例

    这个主要还是adapter 里面 添加list 就行了 这里直接上代码吧 ,我刚写的demo 看的时候看adapter 就行了 布局代码: <?xml version="1.0&quo ...

  8. Tablayout 修改默认选项页,或者跳转到指定的选项页

    tablayout 的默认选项页为 viewpage.setCurrentItem(0) 如果想修改为第二页 viewpage.setCurrentItem(1) 即可 如果是根据跳转的情况来跳到不同 ...

  9. TabLayout 遇到那些坑 tab标签不显示问题

    别人写的参考下,知道问题所在 如何使用 :注意事项 <?xml version="1.0" encoding="utf-8"?> <Relat ...

最新文章

  1. 伟世盾安助国电高级培训中心实现一网双管
  2. 基于GRU和am-softmax的句子相似度模型 | 附代码实现
  3. 一文讲懂什么是三层交换机、网关、DNS、子网掩码、MAC地址
  4. Learn Python the Hard Way: 字典
  5. 深入C#中的String类
  6. linux上mongodb的安装与卸载
  7. 工作 3 年,回国年薪百万?
  8. Redis(一)面试总结精讲
  9. 局域网ip冲突检测工具_“网络工程师培训”基础教程五:局域网
  10. Visual Studio 发布新版API智能提示
  11. php和mysql学生报名系统_[源码和文档分享]基于PHP和MYSQL数据库实现的公共考试报名管理系统网站...
  12. Android POPWindow
  13. 锐捷服务器虚拟化技术_锐捷核心交换机VSU虚拟化配置
  14. LZMA解压缩编码算法的使用
  15. 是时候搞清楚煎饼大妈的真实收入了!来看看专业的研究流程
  16. 【优化系列】汇编优化技术(六):ARM架构64位(AARCH64)汇编优化及demo
  17. [Noi1999]钉子和小球
  18. 国产处理器瑞芯微RK3568对比RK3399性能解析-迅为开发板
  19. String的用法大全
  20. 辩证唯物论和唯物辩证法区别

热门文章

  1. 《影响力》6个使人顺从的武器之一互惠原理深入剖析
  2. VC++ ToolTip的简单使用
  3. mybatis_SQL映射(1)
  4. OpenCV中cvWaitKey()函数注意事项
  5. 十条技巧 更聪明地使用Google搜索
  6. QT读写Sqlite数据库三种方式
  7. MFC SendMessage()函数传递字符串
  8. ActionT 无参数委托详解
  9. python下载包管理器_Python包管理整理:setuptool管理python相关的包
  10. vc++ cserialport 打开多个串口_STM32之USART串口