我的博客
Fragment学习3–底部tab布局
https://blog.csdn.net/qq_26296197/article/details/81146319

布局结构

用的是google比较新的结构 TabLayout做为底部布局,在新闻类的app中tab切换,都是用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"><include  layout="@layout/include_toolbar"/><android.support.v4.view.ViewPagerandroid:id="@+id/vp_content"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"></android.support.v4.view.ViewPager><android.support.design.widget.TabLayoutandroid:id="@+id/tl_tab"android:layout_width="match_parent"android:layout_height="@dimen/dp_56"android:background="@color/white"></android.support.design.widget.TabLayout></LinearLayout>

Activity

public class TabLayoutBottomActivity extends BaseActivity {private TabLayout mTabTl;private ViewPager mContentVp;private List<String> tabIndicators;private List<Fragment> tabFragments;private ContentPagerAdapter contentAdapter;public static void startActivity(Context context ){Intent intent = new Intent(context, TabLayoutBottomActivity.class);context.startActivity(intent);}@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_tab_layout_bottom);mTabTl = (TabLayout) findViewById(R.id.tl_tab);mContentVp = (ViewPager) findViewById(R.id.vp_content);initContent();initTab();}private void initTab(){mTabTl.setTabMode(TabLayout.MODE_FIXED);mTabTl.setSelectedTabIndicatorHeight(0);ViewCompat.setElevation(mTabTl, 10);mTabTl.setupWithViewPager(mContentVp);for (int i = 0; i < tabIndicators.size(); i++) {TabLayout.Tab itemTab = mTabTl.getTabAt(i);if (itemTab!=null){itemTab.setCustomView(R.layout.item_tab_layout_custom);TextView itemTv = (TextView) itemTab.getCustomView().findViewById(R.id.tv_menu_item);itemTv.setText(tabIndicators.get(i));}}mTabTl.getTabAt(0).getCustomView().setSelected(true);}private void initContent(){tabIndicators = new ArrayList<>();for (int i = 0; i < 4; i++) {tabIndicators.add("Tab " + i);}tabFragments = new ArrayList<>();for (String s : tabIndicators) {tabFragments.add(TabContentFragment.newInstance(s));}contentAdapter = new ContentPagerAdapter(getSupportFragmentManager());mContentVp.setAdapter(contentAdapter);}class ContentPagerAdapter extends FragmentPagerAdapter {public ContentPagerAdapter(FragmentManager fm) {super(fm);}@Overridepublic Fragment getItem(int position) {return tabFragments.get(position);}@Overridepublic int getCount() {return tabIndicators.size();}@Overridepublic CharSequence getPageTitle(int position) {return tabIndicators.get(position);}}}

字体颜色选择器

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_checked="true" android:color="@color/blue"></item><item android:color="@color/gray"></item></selector>

重点,下面代码的含义

       mTabTl.setTabMode(TabLayout.MODE_FIXED); //让底部tab处于可以适配的状态(类似wrap_content),占满屏幕mTabTl.setSelectedTabIndicatorHeight(0); //让指示器高度为0ViewCompat.setElevation(mTabTl, 10);//设置底部阴影为10px,位置在于viewpager相交的地方mTabTl.setupWithViewPager(mContentVp); //管理viewpager//设置自定义底部布局itemTab.setCustomView(R.layout.item_tab_layout_custom);mTabTl.getTabAt(0).getCustomView().setSelected(true);
public class TabContentFragment extends Fragment {private static final String EXTRA_CONTENT = "content";public static TabContentFragment newInstance(String content){Bundle arguments = new Bundle();arguments.putString(EXTRA_CONTENT, content);TabContentFragment tabContentFragment = new TabContentFragment();tabContentFragment.setArguments(arguments);return tabContentFragment;}@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View contentView = inflater.inflate(R.layout.fragment_tab_content, null);((TextView)contentView.findViewById(R.id.tv_content)).setText(getArguments().getString(EXTRA_CONTENT));return contentView;}
}

小结

显示这种方式是一次性,把所有的子fragment对象加入进来 ,对于大型的app,需要初始化的地方很多,这种方式可能会很占内存。但是对于一个Activity的子模块,这种方式就是非常的方便和简单的,写代码起来会很快的完成任务。

相对于fragment学习3中,那种方式适合作为app的架构–底部布局,因为它没有一次性的把所有fragment加入进去,它只是加入第一个fragment。

android fragment学习5–fragment扩展 TabLayout非自定义
https://blog.csdn.net/qq_26296197/article/details/81146989

android fragment学习4-底部布局扩展TabLayout相关推荐

  1. android fragment学习6--FragmentTabHost底部布局

    我个人觉得这个与fragment4 5是一样的,但是之前有三个项目中就是这样用的,没有出现问题,有必要拿出来分享下. 我的博客 android fragment学习5–fragment扩展 TabLa ...

  2. android Fragment 学习资料推荐

    为什么80%的码农都做不了架构师?>>>    android   Fragment 学习资料推荐:android大神 郭霖 http://blog.csdn.net/guolin_ ...

  3. 【android studio学习】——常见布局

    标题view视图 android中所有的UI都是通过View和ViewGroup构建的,ViewGroup作为容器装界面中的控件,它可以包含View和ViewGroup,具体关系如下: 注意:andr ...

  4. Fragment学习2--简单的添加Fragment

    布局添加 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  5. android 底部通知,Android Fragment实现底部通知栏

    Android Fragment实现底部通知栏,供大家参考,具体内容如下 截图如下: 1. 第一步先要创建fragment(动态注册) 然后将两个勾选取消掉(还有一种是自己手动创建) 会自动生成相对应 ...

  6. Fragment学习3--底部tab布局

    我的博客 Fragment学习2–简单的添加Fragment https://blog.csdn.net/qq_26296197/article/details/81146022 MessageFra ...

  7. android radiobutton底部导航,android中Fragment+RadioButton实现底部导航栏

    在App中经常看到这样的tab底部导航栏 那么这种效果是如何实现,实现的方式有很多种,最常见的就是使用Fragment+RadioButton去实现.下面我们来写一个例子 首先我们先在activity ...

  8. Android Studio初学者实例:Fragment学习--仿美团外卖界面

    本次课程为Fragment为主题,课程的示例仿美团外卖界面,不同于底部导航栏的Fragment案例,此界面分为左侧切换与顶部切换.本文先是发布代码与效果,后续讲解将会在后续补充.先看看效果: 首先是布 ...

  9. android线性布局设置控件固定在底部,Android UI组件LinearLayout线性布局详解

    LinearLayout 线性布局,该布局的继承关系: 1. 什么是线性布局 通俗的说感觉起来和线有关,参照线的特点,有么是横向的,要么是竖向的. LinearLayout是线性布局控件,它包含的子控 ...

最新文章

  1. OpenCV 【十】——Gamma校正 ——图像灰度变化
  2. mesh threejs 属性_Threejs构建mesh
  3. Android新手入门2016(15)--Gallery画廊
  4. JUC锁-CyclicBarrier(七)
  5. linux扩充单个路径下的内存,超详尽!Linux云服务器存储扩容实操
  6. 十六进制转化为十进制
  7. VMware vSphere5.0 HA高可用性原理
  8. fianl属性 java_Java反射如何有效的修改final属性值详解
  9. 阿里云上如何过等保,收费标准怎么样?
  10. 罗彻斯特大学计算机科学系专业排名,罗切斯特大学优势专业及优势专业排名(USNEWS美国大学排名)...
  11. 【技巧】搭建企业公司网站的实施步骤有哪些
  12. mongo启动报错:ERROR: child process failed, exited with error number 1
  13. 一个屌丝程序猿的人生(八十五)
  14. php jwt使用案例,PHP JWT基础知识及其简单示例
  15. 山东省下载准考证必须用电脑吗
  16. Flask入门(4):CBV和FBV
  17. 【element ui --- DateTimePicker,有效时间不能晚于当前时间】
  18. Cocos2dx 集成CryptoPP
  19. python基础_面向对象进阶
  20. 《JavaScript设计模式》读后感 觉很复杂

热门文章

  1. java webinf lib jar_java web项目中classes文件夹下的class和WEB-INF/lib中jar里的class文件加载顺序...
  2. PHP判断msg,小程序 msgSecCheck 检查内容是否违规违法,但所有内容都可通过问题...
  3. OpenShift 4 之Istio-Tutorial (5) 其它流量控制场景以及VirtualService和DestinationRule的关系
  4. 边缘设备上的实时AI人员检测:检测视频中的人员
  5. 使用Moq框架的各种模拟设置
  6. 在CKEditor中创建自己的命令按钮
  7. 进入磁盘指令_Linux操作指令整理
  8. java 高效加减乘除_java简单加减乘除
  9. 鸿蒙系统对小米的影响,“小米用鸿蒙系统”乌龙会对后续有影响吗
  10. 全国计算机二级ms office知识点,2017全国计算机二级MSOffice复习知识点