TabLayout——浅谈

  TabLayout是Google新推出(其实好久了。。。)的一个组件,在android5.0的之后的应用中被广泛应用,最近做的一个项目当中也使用到,所以抽空花点时间,整理总结一番。

  • TabLayout是什么?

      TabLayout是一个用来横向显示Tab组件的布局。用来显示Tab组件非常方便,是Android应用中使用最广泛的布局组件之一。

  • TabLayout的基本用法

      首先引入TabLayout的库,项目是基于Android Studio的,所以引入库是十分方便的,在应用的build.gradle文件中加入这一句,其中后面的版本号跟自己的 compileSdkVersion保持一致就好:
      

dependencies {……compile 'com.android.support:design:23.2.0'
}

  java调用代码如下:

TabLayout tabLayout = ...;tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));tabLayout.addTab(tabLayout.newTab().setText("Tab 3"));

  
  xml布局举例:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.design.widget.TabLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/tablayout"android:isScrollContainer="true"app:tabMinWidth="100dp"app:tabIndicatorColor="@android:color/holo_red_light"app:tabSelectedTextColor="@android:color/holo_blue_light"app:tabTextColor="@android:color/black"></android.support.design.widget.TabLayout></LinearLayout>

  显示效果(这里是用平板模拟器做演示):

  • TabLayout与ViewPager结合使用

      TabLayout与ViewPager结合使用可以达到点击tab更新ViewPager、滑动ViewPager更新Tab的效果,因此用来做导航页,是十分方便的,使用时需要注意的一个地方如下:
      

mTabLayout.addTab(mTabLayout.newTab().setText(R.string.DTV));mTabLayout.addTab(mTabLayout.newTab().setText(R.string.broadband_pay));mVPBody = (ViewPager)findViewById(R.id.vp_search_body);dvbSearchFragment = new DVBSearchFragment();brandSearchFragment = new BrandSearchFragment();listSearch = new ArrayList<>();listSearch.add(dvbSearchFragment);listSearch.add(brandSearchFragment);adapter = new SearchBodyAdapter(getSupportFragmentManager(),listSearch);mVPBody.setAdapter(adapter);mTabLayout.setupWithViewPager(mVPBody);  //tablayout 与ViewPager关联//必须在后面重新为Tab设置valuemTabLayout.getTabAt(0).setText(R.string.DTV);mTabLayout.getTabAt(1).setText(R.string.broadband_pay);

  从上述代码中可以清楚的看到,我们在调用TabLayout的setupWithViewPager()方法后需要再次为已添加的Tab赋值,否则之前的tab的value就会消失。(直接拿一个小项目的配图看了)效果如下:
  
  而正确的效果应该如下:
  
- TabLayout中Tab字体大小修改
  修改TabLayout中Tab字体大小需要通过定义Style的方式来完成,然后将值赋给TabLayout,代码如下:
  首先定义style:

  <style name="tablayout_textstyle"><item name="android:textSize">@dimen/text_size_title</item></style>

  其次讲style赋给TabLayout,代码如下:

    <android.support.design.widget.TabLayout
        android:background="#EBEEF3"android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/tablayout"android:isScrollContainer="true"<!--tab的最小宽度-->app:tabMinWidth="100dp"<!--indicator的颜色-->app:tabIndicatorColor="@android:color/holo_blue_dark"<!--选中时的字体颜色-->app:tabSelectedTextColor="@android:color/holo_blue_dark"<!--未选中时的字体颜色-->app:tabTextColor="@android:color/black"<!--字体风格-->app:tabTextAppearance="@style/tablayout_textstyle"></android.support.design.widget.TabLayout>
  • TabLayout中Tab背景修改
    修改背景的方法比较简单,直接使用如下代码,:
app:tabBackground="@drawable/tab_selector"

  如果不需要变换颜色,可以直接使用一种颜色, 但是通常我们会分为选中和未选中两种状态为不同的颜色,因此需要使用state-select文件来做,样例代码如下:
  

<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@color/tab_select" android:state_selected="true" /><item android:drawable="@color/tab_normal" />
</selector>

  需要注意的是,写select文件,要把normal-state放在最后。
  以上就是我对TabLayout的一些基本认识以及在实际项目当中遇到的一些问题,分享与此,与君共勉!

  三日不读书,便觉语言无味,面目可憎;
  三天不动笔,必会思维迟钝,头脑发空;

TabLayout——浅谈相关推荐

  1. android悬浮按钮阴影,浅谈FloatingActionButton(悬浮按钮)

    一.介绍 这个类是继承自ImageView的,所以对于这个控件我们可以使用ImageView的所有属性 android.support.design.widget.FloatingActionButt ...

  2. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  3. 【大话设计模式】——浅谈设计模式基础

    初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...

  4. 学校计算机机房好处,浅谈学校计算机机房维护

    浅谈学校计算机机房维护    现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...

  5. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  6. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  7. 浅谈GCC预编译头技术

    浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...

  8. 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

    震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...

  9. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...

最新文章

  1. python检查_python设置检查点简单实现
  2. LeetCode实战:二叉搜索树中第K小的元素
  3. 干货合集 | 带你深入浅出理解深度学习(附资源打包下载)
  4. (十五)java数组
  5. 《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》一一第 1 章  MySQL的安装与配置...
  6. 登录MySQL非默认3306端口号的语句
  7. J2EE用监听器实现同一用户只能有一个在线
  8. Centos7下安装redis
  9. 如何使用Java 8 FlatMap JDBC ResultSet?
  10. 活动预告 | 2020移动云客户高端峰会即将揭幕,邀您一起携手云端!
  11. 敏捷与安全不可兼得吗?看完这篇文章后,我想说:未必!
  12. Lua笔记2 变量、循环和流程控制
  13. android+解锁风格,Android手势解锁控件实现(仿京东金融手势解锁)
  14. 如何完美的卸载Office2007?
  15. 函数图像的变换 与 解析式的变换 之关系
  16. 计算机老是重启进不了桌面,win10电脑无限重启进不了桌面怎么解决
  17. pop3服务器协议初始化失败,邮件的发送和接收故障处理的几点方法
  18. 海康摄像头浏览器访问不了
  19. 用vue写一个天气webAPP
  20. google、bing ,baidu 等搜索引擎 查询参数

热门文章

  1. hdu 4544 优先队列
  2. .xyz文件的定义及读取
  3. 数据结构~07.栈和队列的基本概念
  4. 电脑显示计算机资源不足 新用户无法登录,三招解决win10电脑提示资源不足的问题...
  5. Centos更新内核
  6. Django 1.9 支持中文
  7. Layui表单复选框验证
  8. 美国孩子上学真像你以为的那么轻松吗?
  9. 我理解的云桌面(或桌面云)
  10. qt Android 按键事件,QT无窗口状态下对键盘事件的监听