Android深度定制化TabLayout:圆角,渐变色,背景边框,圆角渐变下划线,基于Android原生TabLayout

在附录1的基础上丰富自定义的TabLayout,这次增加两个内容:

1,当选中某一个切换卡时候,文本字体变粗。

2,增加下划线指示器,并且下划线指示器是渐变圆角的。下划线从右往左,从浅蓝变深蓝。

实现效果如图所示:

继承自Android原生TabLayout的MyTabLayout.java:

package zhangphil.test; import android.content.Context; import android.graphics.Color; import android.support.design.widget.TabLayout; import android.text.TextPaint; import android.util.AttributeSet; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MyTabLayout extends TabLayout { private List titles; public MyTabLayout(Context context) { super(context); init(); } public MyTabLayout(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MyTabLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { titles = new ArrayList<>(); this.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(Tab tab) { /** * 设置当前选中的Tab为特殊高亮样式。 */ if (tab != null && tab.getCustomView() != null) { TextView tab_text = tab.getCustomView().findViewById(R.id.tab_text); TextPaint paint = tab_text.getPaint(); paint.setFakeBoldText(true); tab_text.setTextColor(Color.WHITE); tab_text.setBackgroundResource(R.drawable.tablayout_item_pressed); ImageView tab_layout_indicator = tab.getCustomView().findViewById(R.id.tab_indicator); tab_layout_indicator.setBackgroundResource(R.drawable.tablayout_item_indicator); } } @Override public void onTabUnselected(Tab tab) { /** * 重置所有未选中的Tab颜色、字体、背景恢复常态(未选中状态)。 */ if (tab != null && tab.getCustomView() != null) { TextView tab_text = tab.getCustomView().findViewById(R.id.tab_text); tab_text.setTextColor(getResources().getColor(android.R.color.holo_red_light)); TextPaint paint = tab_text.getPaint(); paint.setFakeBoldText(false); tab_text.setBackgroundResource(R.drawable.tablayout_item_normal); ImageView tab_indicator = tab.getCustomView().findViewById(R.id.tab_indicator); tab_indicator.setBackgroundResource(0); } } @Override public void onTabReselected(Tab tab) { } }); } public void setTitle(List titles) { this.titles = titles; /** * 开始添加切换的Tab。 */ for (String title : this.titles) { Tab tab = newTab(); tab.setCustomView(R.layout.tablayout_item); if (tab.getCustomView() != null) { TextView tab_text = tab.getCustomView().findViewById(R.id.tab_text); tab_text.setText(title); } this.addTab(tab); } } }

在onTabSelected中把选中的tab的文本变粗变成白色。同时设置下划线指示器可见。涉及到的下划线res/drawable/tablayout_item_indicator.xml:<?xml version="1.0" encoding="utf-8"?>

是一个由右往左渐变的颜色圆角背景shape.

在MyTabLayout的setTitle中,为该切换View增加的res/layout/tablayout_item.xml:<?xml version="1.0" encoding="utf-8"?>

res/layout/tablayout_item.xml为每一个添加到切换条上的其中一个选项tab。它使用了默认的(未选中)的背景资源作为未选中时候的背景res/drawable/tablayout_item_normal.xml:<?xml version="1.0" encoding="utf-8"?> res/drawable/tablayout_item_normal.xml其实是一个简单的有圆角边框的shape,没有选中的tab将以此作为背景资源。

当选中了某一个tab时候,把一个具有颜色到的背景资源文件作为tab的背景衬上去res/drawable/tablayout_item_pressed.xml:<?xml version="1.0" encoding="utf-8"?> 这其实就是一个具有橙红色从右往左渐变的圆角背景。

具体使用和Android的原生TabLayout一致,写到xml布局里面:<?xml version="1.0" encoding="utf-8"?>

上层Java代码:package zhangphil.test; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import java.util.Arrays; import java.util.List; public class TabActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tab_avtivity); String[] str = {"zhang", "phil", "zhang phil", "csdn", "zhang phil csdn", "zhang phil @ csdn", "blog.csdn.net/zhangphil", "android"}; List titles = Arrays.asList(str); MyTabLayout tabLayout = findViewById(R.id.tab_layout); tabLayout.setTitle(titles); } }

代码运行结果就是前文的配图。附录:

android 圆角边框边框渐变,Android深度定制化TabLayout:圆角,渐变色,背景边框,圆角渐变下划线,基于Android原生TabLayout...相关推荐

  1. 面向隐私AI的TensorFlow深度定制化实践

    作者 | Rosetta团队 出品 | AI科技大本营(ID:rgznai100) 之前我们整体上介绍了基于深度学习框架开发隐私 AI 框架中的工程挑战和可行解决方案.在这一篇文章中,我们进一步结合 ...

  2. android自定义布局背景透明,带下划线的Android Layout透明布局背景

    我正在尝试绘制可绘制的布局背景,该背景只能是高度为1-2 dp的渐变下划线,其余部分是透明的,因此上部将具有父级的背景. 这就是我所拥有的. android:endColor="#FFFFF ...

  3. android chrome 44,[图]非隔代升级:新代码暗示Chrome OS的安卓支持将基于Android Q

    由于在更新中直接跳过了Android Oreo版本,因此外媒此前猜测Chrome OS系统会继续采用隔代升级的方案,跳过Android Q直接基于Android R.不过发布到Chromium Ger ...

  4. android 下划线edittext,Android实现EditText添加下划线

    在安卓高版本,默认是有下划线的,其默认下划线的颜色是由其主题颜色来控制的! 控制如下: @color/colorPrimary @color/colorPrimaryDark **@color/col ...

  5. android下划线链接,Android使用TextView实现无下划线超链接的方法

    本文实例讲述了Android使用TextView实现无下划线超链接的方法.分享给大家供大家参考,具体如下: Android系统默认把网址.电话.地图(geo地址).邮箱等转换为超链接. 具体请查看 a ...

  6. Android 给EditText添加下划线

    在安卓高版本中,默认是有下划线的,其下划线的颜色是由其主题颜色来控制的 <style name="AppTheme" parent="Theme.AppCompat ...

  7. Android之自定义EditText光标和下划线颜色

    最近在写些小Demo复习基础,在用到EditText的时候突然发现之前几乎没有注意到它的光标和下划线的颜色,于是花了不少时间,看了不少博客,现在就来总结和分享一下收获. 1.第一印象:原生的EditT ...

  8. android 4.4版miui v5,基于Android 4.4的MIUI V5公测开始,适配17款非小米机型

    拼 命 加 载 中 ... 小米MIUI V5此前已经升级为对低端手机有更好的优化的Android 4.4 KitKat,此前仅支持小米自家机型,上月月底才公布了源代码,经过合作开发组的努力,日前终于 ...

  9. 基于Android的健身系统-计算机毕设 附源码90470

    基于Android的健身系统 目  录 摘要 1 1 绪论 1 1.1 课题研究的背景与意义 1 1.2研究的目的与研究内容 1 1.3本文主要工作 1 2基于Android的手机健身系统系统分析 3 ...

最新文章

  1. springboot怎么写上传头像接口?
  2. Java中泛型的各种使用
  3. 06. 用css实现三角形
  4. c语言fgetc()函数(从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动)
  5. Linux中printk和strace命令调试的一些技巧
  6. python天天向上的力量 A
  7. linux精简、备份还原、iso文件、批量安装?
  8. 前后端分离使用 Token 登录解决方案
  9. Save the Room【找规律】
  10. 面试官:如果要存ip地址,用什么数据类型比较好?
  11. 【unity】解决 2d-extras 的 CustomRuleTileMenu 脚本报错的问题
  12. HAOI2018 简要题解
  13. Latex的使用模板
  14. 【博客427】通过redfish协议操控服务器
  15. numpy:求解小游戏概率
  16. 想转行学IT!0基础应该要学习哪个技术
  17. 论文 结构图 用 visio
  18. FastAdmin多表联查
  19. 实现拖拉机发牌程序——控制台版python
  20. 浏览器使用flash时出现此Flash Player 与您所在地区不相容的提示解决方法

热门文章

  1. android大作业闹钟的功能,定时闹钟课程设计大作业.doc
  2. TC SRM 655 Div1 Level 3 题解
  3. Android 如何通过代码安装 APK
  4. ubuntu上thunderbird添加QQ邮箱
  5. win10配置JDK环境
  6. ‘utf-8‘ codec can‘t decode byte 0x.. in position .: invalid start byte
  7. java项目管理系统_基于SSM框架的JAVA科研项目管理系统
  8. 猪猪猫.CN-WINXPSP2电脑城装机03DVD豪华版
  9. 对口河北高考计算机试题,河北对口高考计算机模拟题四
  10. 计算机CPU的工艺与原子能工艺对比,Intel10nm工艺和7nm工艺对比结果 处理器差距有多大?...