android fragment学习4-底部布局扩展TabLayout
我的博客
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相关推荐
- android fragment学习6--FragmentTabHost底部布局
我个人觉得这个与fragment4 5是一样的,但是之前有三个项目中就是这样用的,没有出现问题,有必要拿出来分享下. 我的博客 android fragment学习5–fragment扩展 TabLa ...
- android Fragment 学习资料推荐
为什么80%的码农都做不了架构师?>>> android Fragment 学习资料推荐:android大神 郭霖 http://blog.csdn.net/guolin_ ...
- 【android studio学习】——常见布局
标题view视图 android中所有的UI都是通过View和ViewGroup构建的,ViewGroup作为容器装界面中的控件,它可以包含View和ViewGroup,具体关系如下: 注意:andr ...
- Fragment学习2--简单的添加Fragment
布局添加 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...
- android 底部通知,Android Fragment实现底部通知栏
Android Fragment实现底部通知栏,供大家参考,具体内容如下 截图如下: 1. 第一步先要创建fragment(动态注册) 然后将两个勾选取消掉(还有一种是自己手动创建) 会自动生成相对应 ...
- Fragment学习3--底部tab布局
我的博客 Fragment学习2–简单的添加Fragment https://blog.csdn.net/qq_26296197/article/details/81146022 MessageFra ...
- android radiobutton底部导航,android中Fragment+RadioButton实现底部导航栏
在App中经常看到这样的tab底部导航栏 那么这种效果是如何实现,实现的方式有很多种,最常见的就是使用Fragment+RadioButton去实现.下面我们来写一个例子 首先我们先在activity ...
- Android Studio初学者实例:Fragment学习--仿美团外卖界面
本次课程为Fragment为主题,课程的示例仿美团外卖界面,不同于底部导航栏的Fragment案例,此界面分为左侧切换与顶部切换.本文先是发布代码与效果,后续讲解将会在后续补充.先看看效果: 首先是布 ...
- android线性布局设置控件固定在底部,Android UI组件LinearLayout线性布局详解
LinearLayout 线性布局,该布局的继承关系: 1. 什么是线性布局 通俗的说感觉起来和线有关,参照线的特点,有么是横向的,要么是竖向的. LinearLayout是线性布局控件,它包含的子控 ...
最新文章
- OpenCV 【十】——Gamma校正 ——图像灰度变化
- mesh threejs 属性_Threejs构建mesh
- Android新手入门2016(15)--Gallery画廊
- JUC锁-CyclicBarrier(七)
- linux扩充单个路径下的内存,超详尽!Linux云服务器存储扩容实操
- 十六进制转化为十进制
- VMware vSphere5.0 HA高可用性原理
- fianl属性 java_Java反射如何有效的修改final属性值详解
- 阿里云上如何过等保,收费标准怎么样?
- 罗彻斯特大学计算机科学系专业排名,罗切斯特大学优势专业及优势专业排名(USNEWS美国大学排名)...
- 【技巧】搭建企业公司网站的实施步骤有哪些
- mongo启动报错:ERROR: child process failed, exited with error number 1
- 一个屌丝程序猿的人生(八十五)
- php jwt使用案例,PHP JWT基础知识及其简单示例
- 山东省下载准考证必须用电脑吗
- Flask入门(4):CBV和FBV
- 【element ui --- DateTimePicker,有效时间不能晚于当前时间】
- Cocos2dx 集成CryptoPP
- python基础_面向对象进阶
- 《JavaScript设计模式》读后感 觉很复杂
热门文章
- java webinf lib jar_java web项目中classes文件夹下的class和WEB-INF/lib中jar里的class文件加载顺序...
- PHP判断msg,小程序 msgSecCheck 检查内容是否违规违法,但所有内容都可通过问题...
- OpenShift 4 之Istio-Tutorial (5) 其它流量控制场景以及VirtualService和DestinationRule的关系
- 边缘设备上的实时AI人员检测:检测视频中的人员
- 使用Moq框架的各种模拟设置
- 在CKEditor中创建自己的命令按钮
- 进入磁盘指令_Linux操作指令整理
- java 高效加减乘除_java简单加减乘除
- 鸿蒙系统对小米的影响,“小米用鸿蒙系统”乌龙会对后续有影响吗
- 全国计算机二级ms office知识点,2017全国计算机二级MSOffice复习知识点