有了它,再也不用怕在TextView的任意位置添加各式各样的标签了

文章介绍了在Android开发中处理文本标签的常见问题,推荐了一个名为TagTextView的库,它支持在文本任意位置添加标签,包括文本、图片、网络图片、Gif等,并提供了详细的使用步骤和API说明,简化了代码编写和维护工作。
摘要由CSDN通过智能技术生成

在Android开发中,我们时常遇到以下几个问题:

  • 在文本指定位置添加一个标签
  • 把原来的文本替换成指定样式
  • 某某协议点击可以跳转协议的详细内容
  • 在指定位置插入一个网络图片

等等,UI大佬的样式可能是千奇百怪,毕竟我们不能左右UI大佬,所以我们只有自己写,当文本不超过一行的时候,使用drawableLeft等在前面插入一个图片,当然可以解决问题,但是插入的图片需要设置大小,有可能会变形,有时候需要在中间某一个点插入呢,当然也有办法,使用Span也可以解决,但是每一次都需要自定义一遍,把代码写一遍,不仅代码冗余,维护也很麻烦。这里我推荐使用TagTextView库,使用简单,不影响原来布局代码,基本支持各种标签,欢迎star。

效果图

效果图

API特色

  • 支持在文本的任意位置添加各种不同标签
  • 支持指定位置、文本替换为指定标签
  • 支持网络标签
  • 支持Gif标签
  • 支持自定义布局文件
  • 支持指定文本点击响应
  • 支持下划线
  • 支持删除线
  • 支持超链
  • 支持Kotlin、Java

如何使用

Step 1.先在 build.gradle(Project:XXX) 的 repositories 添加:

 allprojects {
      repositories {
         ...
         maven { url "https://jitpack.io" }
      }
    } 

Step 2. 然后在 build.gradle(Module:XXX) 的 dependencies 添加:

 dependencies {
           implementation 'com.github.ChinaLike:TagTextView:0.2.0'
           // 如果支持网络图片标签,需要添加Glide库
           //implementation "com.github.bumptech.glide:glide:4.11.0"
   } 

Step 3. 如果支持网络标签,需要在AndroidManifest.xml中添加:

<uses-permission android:name="android.permission.INTERNET" /> 

Step 4. 在XML中使用

<com.view.text.view.TagTextView
    android:id="@+id/url_tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:tvt_type="text"
    app:tvt_text="新品"
    app:tvt_start_gradient_background_color="#FFF6B7"
    app:tvt_end_gradient_background_color="#F6416C"
    app:tvt_margin_right="20dp"
    android:text="荣耀V40轻奢版 5G 超级快充 6400万超清四摄 8GB+128GB钛空银 移动联通电信5G 双卡双待手机" /> 

或者 Step 4. 在代码中使用(不影响原来布局)

val tv1Config = TagConfig(Type.TEXT).apply {
    text = "新品"
}
text_tv1.addTag(tv1Config) 

API说明

扩展方法

不需要修改原来XML布局文件,只需要在代码中使用以下方法即可实现标签样式,这样对原来代码影响最小的。

addTag(config:TagConfig)

  • 添加标签
  • 属性介绍

addTag(view:View,position:Int,align:Align,marginLeft:Int,marginRight:Int)

  • 添加自定义标签
  • 属性介绍
    • view:自定义View
    • position:显示位置,默认:0
    • align:对其方式,默认:Align.CENTER
    • marginLeft:标签距离左侧距离,默认:0
    • marginRight:标签距离右侧距离,默认:0

addTextTag(block: TagConfig.() -> Unit)

  • 添加文本标签
  • 属性介绍
    • block:标签自定义参数

addImageTag(block: TagConfig.() -> Unit)

  • 添加图标标签
  • 属性介绍
    • block: 标签自定义参数

addTextImageTag(block: TagConfig.() -> Unit)

  • 添加图文标签
  • 属性介绍
    • block: 标签自定义参数

addUrlTag(block: TagConfig.() -> Unit)

  • 添加图文标签
  • 属性介绍
    • block: 标签自定义参数

replaceTag(tagText: String, config: TagConfig, isFirst: Boolean = true)

  • 替换标签
  • 属性介绍
    • tagText:需要替换的文本
    • config:标签配置
    • isFirst:是否匹配第一个

replaceTag(tagText: String, view: View, isFirst: Boolean = true, align: Align = Align.CENTER, marginLeft: Int = 0, marginRight: Int = 0)

  • 替换标签
  • 属性介绍
    • tagText:需要替换的文本
    • view:自定义标签
    • isFirst:是否匹配第一个
    • align:标签对齐方式
    • marginLeft:标签距离左侧距离
    • marginRight:标签距离右侧距离

replaceTag(startIndex: Int, endIndex: Int, config: TagConfig)

  • 替换标签
  • 属性介绍
    • startIndex:开始下标
    • endIndex:结束下标
    • config:标签配置

replaceTag( startIndex: Int, endIndex: Int, view: View, align: Align = Align.CENTER, marginLeft: Int = 0, marginRight: Int = 0 )

  • 替换标签
  • 属性介绍
    • startIndex:开始位置
    • endIndex:结束位置
    • view:自定义标签
    • align:标签对齐方式
    • marginLeft:标签距离左侧距离
    • marginRight:标签距离右侧距离

setUnderline(underlineText: String? = null, isFirst: Boolean = true)

  • 设置文本下划线
  • 属性介绍
    • underlineText:需要加下划线的文本,不设置则匹配所有文本
    • isFirst:是否匹配第一个指定字符串

setUnderline(startIndex: Int, endIndex: Int)

  • 设置文本下划线
  • 属性介绍
    • startIndex:开始下标
    • endIndex:结束下标

setDeleteLine(deleteLineText: String? = null, isFirst: Boolean = true)

  • 设置文本删除线
  • 属性介绍
    • deleteLineText:需要加删除线的文本,不设置则匹配所有文本

setDeleteLine(startIndex: Int, endIndex: Int)

  • 设置文本删除线
  • 属性介绍
    • startIndex:开始下标
    • endIndex:结束下标

setSpecificTextColor(@ColorInt color: Int,specificText: String,isFirst: Boolean = true,isUnderlineText: Boolean = false,click: () -> Unit = {})

  • 设置指定文字颜色
  • 属性介绍
    • color:制定文本颜色
    • specificText:指定文本
    • isFirst:匹配第一个,默认值:true
    • isUnderlineText:是否显示下划线,可选,默认值false
    • click:点击事件响应

setSpecificTextColor(@ColorInt color: Int,startIndex: Int,endIndex: Int,isUnderlineText: Boolean = false,click: () -> Unit = {})

  • 设置指定文字颜色
  • 属性介绍
    • color:制定文本颜色
    • startIndex:开始下标
    • endIndex:结束下标
    • isUnderlineText:是否显示下划线,可选,默认值false
    • click:点击事件响应

setURLSpan(startIndex: Int,endIndex: Int,type: LinkType,linkText: String,@ColorInt color: Int? = null,isUnderlineText: Boolean = false)

  • 设置超链
  • 属性介绍
    • startIndex:开始下标
    • endIndex:结束下标
    • type:超链接类型,参考LinkType
    • linkText:链接文本 ,比如跳转电话,只需要传入电话号码就可以
    • color:超链文本的颜色
    • isUnderlineText:是否显示下划线,默认值false

在XML中使用(需要修改原来布局)

在XML中使用的话,标签可以通过xml属性配置,但是只支持一个标签,如果需要多个标签,只能通过扩展方法来添加,或者使用tvt_layout属性设置自定义View

<com.view.text.view.TagTextView
    android:id="@+id/url_tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:tvt_type="text"
    app:tvt_text="新品"
    app:tvt_start_gradient_background_color="#FFF6B7"
    app:tvt_end_gradient_background_color="#F6416C"
    app:tvt_margin_right="20dp"
    android:text="荣耀V40轻奢版 5G 超级快充 6400万超清四摄 8GB+128GB钛空银 移动联通电信5G 双卡双待手机" /> 

属性介绍

API描述默认值说明
tvt_type标签类型text-文本标签,image-图片标签,textImage-图文
tvt_radius标签圆角tvt_type为text、textImage时有效
tvt_left_top_radius标签左上角圆角2dptvt_type为text、textImage,且tvt_radius未设置有效
tvt_left_bottom_radius标签左下角圆角2dptvt_type为text、textImage,且tvt_radius未设置有效
tvt_right_top_radius标签右上角圆角2dptvt_type为text、textImage,且tvt_radius未设置有效
tvt_right_bottom_radius标签右下角圆角2dptvt_type为text、textImage,且tvt_radius未设置有效
tvt_padding标签内边距tvt_type为text、textImage时有效
tvt_top_padding标签上内边距0dptvt_type为text、textImage,且tvt_padding未设置有效
tvt_right_padding标签右内边距5dptvt_type为text、textImage,且tvt_padding未设置有效
tvt_bottom_padding标签下内边距0dptvt_type为text、textImage,且tvt_padding未设置有效
tvt_left_padding标签左内边距5dptvt_type为text、textImage,且tvt_padding未设置有效
tvt_background_color标签背景颜色Color.GRAYtvt_type为text、textImage时有效
tvt_start_gradient_background_color标签渐变开始颜色tvt_type为text、textImage时有效
tvt_end_gradient_background_color标签渐变结束颜色tvt_type为text、textImage时有效
tvt_stroke_width标签边框宽度tvt_type为text、textImage时有效
tvt_stroke_color标签边框颜色Color.GRAYtvt_type为text、textImage,且tvt_stroke_width>0有效
tvt_text_size文本字体大小tvt_type为text、textImage有效
tvt_text_color文本字体颜色Color.WHITEtvt_type为text、textImage有效
tvt_width标签宽度tvt_type为text、textImage有效
tvt_height标签高度tvt_type为text、textImage有效
tvt_align标签与文本对其方式Align.CENTERbaseline-基线对其,center-中心对其,bottom-底部对其
tvt_text标签文本tvt_type为text、textImage有效
tvt_image_resource标签图片tvt_type为image、textImage有效
tvt_position标签显示位置0默认在文本最前面
tvt_margin_left标签距离左侧距离0
tvt_margin_right标签距离右侧距离0
tvt_text_margin_image文本与图片的距离0dptvt_type为textImage有效
tvt_layout自定义View标签不设置tvt_type时有效
tvt_image_align_text图片与文字的位置关系Orientation.LEFTtvt_type为textImage有效,left-图片在文字的左边(默认),top-图片在文字上边,right-图片在文字的右边,bottom-图片在文字的下边
tvt_image_width图片的宽度tvt_type为image、textImage时有效
tvt_image_height图片的高度tvt_type为image、textImage时有效

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
在这里插入图片描述
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

全套视频资料:

一、面试合集
在这里插入图片描述
二、源码解析合集

在这里插入图片描述
三、开源框架合集

在这里插入图片描述
欢迎大家一键三连支持,若需要文中资料,直接扫码免费领取↓↓↓

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值