android原生TabLayout之自定义指示器效果

2024-06-07 18:12

本文主要是介绍android原生TabLayout之自定义指示器效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

com.google.android.material.tabs.TabLayout” 这个玩意说起来大家都不陌生。结合viewPager或者单独使用。场景非常多。当然市面上的三方也数不胜数。但是毕竟是亲儿子。用起来终归是顺手一些。下面说一下TabLayout的具体用法细节:

首先,xml布局引入(此处为举例说明,具体属性用法自行百度):

<com.google.android.material.tabs.TabLayoutandroid:id="@+id/tab_record_layout"android:layout_width="match_parent"android:layout_height="43dp"android:background="@color/transparent"#具体属性用法自行百度app:tabIndicatorColor="#0E55FD"/>

下面先说一下具体调用:

 for (i in list.indices) {tab_layout.addTab(tab_layout.newTab()) //动态创建tab//亦或tab_layout.newTab().setText(data.type_name).setTag(data.type_id) }

然后就是动态添加TabLayout的样式,如果是属性可以满足就不需要,如果自带属性不能满足效果,则自定义样式,如下:

 for (i in 0 until tab_layout.tabCount) {val tab = tab_layout.getTabAt(i)tab?.customView = layoutInflater.inflate(R.layout.custom_tab, null)if (tab != null && tab.customView != null) {val abIcon = tab.customView!!.findViewById<ImageView>(R.id.iv_tab_item)val tabTitle = tab.customView!!.findViewById<TextView>(R.id.tv_tab_item)tabTitle.text = tab.text//把第一个设为默认选中if (i == 0) {tabTitle.setTextColor(Color.parseColor("#0E55FD"))tabTitle?.typeface = Typeface.defaultFromStyle(Typeface.BOLD)abIcon.isInvisible = false}}}

最后就是添加监听:

tab_layout.addOnTabSelectedListener(onTabSelectedListener)
//...
val onTabSelectedListener: TabLayout.OnTabSelectedListener =object : TabLayout.OnTabSelectedListener {//选中监听override fun onTabSelected(tab: TabLayout.Tab) {if (tab.customView != null) {//获取自定义tab布局中的viewval tabIcon = tab.customView!!.findViewById<ImageView>(R.id.iv_tab_item)val tabTitle = tab.customView!!.findViewById<TextView>(R.id.tv_tab_item)tabTitle.text = tab.texttabTitle.setTextColor(Color.parseColor("#0E55FD"))tabTitle?.typeface = Typeface.defaultFromStyle(Typeface.BOLD)tabIcon.isInvisible = false}type_id = mViewModel.typeList.get(tab.position).type_idmViewModel.getList(type_id)}// 未选中监听override fun onTabUnselected(tab: TabLayout.Tab) {if (tab.customView != null) {val tabIcon = tab.customView!!.findViewById<ImageView>(R.id.iv_tab_item)val tabTitle = tab.customView!!.findViewById<TextView>(R.id.tv_tab_item)tabTitle.text = tab.texttabTitle.setTextColor(Color.parseColor("#333333"))tabTitle.typeface = Typeface.defaultFromStyle(Typeface.NORMAL);tabIcon.isInvisible = true}}override fun onTabReselected(tab: TabLayout.Tab) {}}

最后,如果是ViewPager + TabLayout需要联动的话,则添加联动代码:

 //使用.attach()将TabLayout和ViewPager2进行绑定,如果没有这步操作将不会联动TabLayoutMediator(tab_layout, viewPager) { tab, position ->//根据position修改tab的样式和文字等tab.text = tabTitles[position]}.attach()

具体需结合场景,灵活使用。
END

这篇关于android原生TabLayout之自定义指示器效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039918

相关文章

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

go rate 原生标准限速库的使用

《gorate原生标准限速库的使用》本文主要介绍了Go标准库golang.org/x/time/rate实现限流,采用令牌桶算法控制请求速率,提供Allow/Reserve/Wait方法,具有一定... 目录介绍安装API介绍rate.NewLimiter:创建限流器limiter.Allow():请求是否

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.