日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

好用的Span(富文本)api

發布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 好用的Span(富文本)api 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*** 將一段文字中指定range的文字改變大小* @param range 要改變大小的文字的范圍 ps:你關注的${name}也關注了你喲 = 4..(name.length+4)* @param scale 縮放值,大于1,則比其他文字大;小于1,則比其他文字小;默認是1.5*/ fun CharSequence.toSizeSpan(range: IntRange, scale: Float = 1.5f): SpannableString =SpannableString(this).apply {setSpan(RelativeSizeSpan(scale),range.first,range.last,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 將一段文字中指定range的文字改變大小*/ fun CharSequence.toTextSizeSpan(range: IntRange, dp: Int): SpannableString =SpannableString(this).apply {setSpan(AbsoluteSizeSpan(dp, true),range.first,range.last,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 將一段文字中指定range的文字改變前景色* @param range 要改變前景色的文字的范圍* @param color 要改變的顏色,默認是紅色*/ fun CharSequence.toColorSpan(range: IntRange, color: Int = Color.RED): SpannableString =SpannableString(this).apply {setSpan(ForegroundColorSpan(color),range.first,range.last,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 將一段文字中指定range的文字改變背景色* @param range 要改變背景色的文字的范圍* @param color 要改變的顏色,默認是紅色*/ fun CharSequence.toBackgroundColorSpan(range: IntRange, color: Int = Color.RED): SpannableString =SpannableString(this).apply {setSpan(BackgroundColorSpan(color),range.first,range.last,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 將一段文字中指定range的文字添加刪除線* @param range 要添加刪除線的文字的范圍*/ fun CharSequence.toStrikeThrougthSpan(range: IntRange): SpannableString =SpannableString(this).apply {setSpan(StrikethroughSpan(), range.first, range.last, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 將一段文字中指定range的文字添加顏色和點擊事件* @param range 目標文字的范圍* @param isUnderlineText 是否加上下劃線* 注意:需要同時給tv設置下面兩個* tv.movementMethod = LinkMovementMethod.getInstance()//使點擊生效* tv.highlightColor = R.color.transparent.toColor()//使點擊相應位置后不留下背景色(透明)*/ inline fun CharSequence.toClickSpan(range: IntRange,color: Int = Color.RED,isUnderlineText: Boolean = false,crossinline clickListener: (View) -> Unit ): SpannableString =SpannableString(this).apply {setSpan(object : ClickableSpan() {override fun onClick(widget: View) {clickListener(widget)}override fun updateDrawState(ds: TextPaint) {ds.color = colords.isUnderlineText = isUnderlineText}}, range.first, range.last, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 在文本頭部插入一個drawable*/ fun CharSequence.toDrawableSpan(drawable: Drawable): SpannableString =SpannableString(this).apply {setSpan(DrawableMarginSpan(drawable), 0, 0, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 使一段文本模糊* [blurRadius]模糊半徑,5f模糊但能看清字,15f完全模糊看不出來字* ps:模糊半徑必須大于0f*/ fun CharSequence.toBlurSpan(range: IntRange, blurRadius: Float): SpannableString =SpannableString(this).apply {setSpan(MaskFilterSpan(BlurMaskFilter(blurRadius, BlurMaskFilter.Blur.NORMAL)), range.first, range.last, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 使一段文本加上下劃線*/ fun CharSequence.toUnderlineSpan(range: IntRange): SpannableString =SpannableString(this).apply {setSpan(UnderlineSpan(), range.first, range.last, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 替換某一段文本為img* ps:無法插入而不替換(first=last)*/ fun CharSequence.toImageSpan(range: IntRange, drawable: Drawable): SpannableString =SpannableString(this).apply {drawable.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight)setSpan(ImageSpan(drawable), range.first, range.last, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 某一段文本橫向縮放*/ fun CharSequence.toScaleXSpan(range: IntRange, scale: Float): SpannableString =SpannableString(this).apply {setSpan(ScaleXSpan(scale), range.first, range.last, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 某一段文本設置樣式* [style]BOLD加粗,ITALIC斜體,BOLD_ITALIC加粗并設置斜體*/ fun CharSequence.toStyleSpan(range: IntRange, style: Int = Typeface.BOLD): SpannableString =SpannableString(this).apply {setSpan(StyleSpan(style), range.first, range.last, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 某一段文本下沉,可配合大小span設置數學下標*/ fun CharSequence.toSubscriptSpan(range: IntRange): SpannableString =SpannableString(this).apply {setSpan(SubscriptSpan(), range.first, range.last, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 某一段文本上浮,可配合大小span設置數學上標(次方)*/ fun CharSequence.toSuperscriptSpan(range: IntRange): SpannableString =SpannableString(this).apply {setSpan(SuperscriptSpan(), range.first, range.last, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 某一段文本相應的行設置顏色,比如0..10,如果這幾個字只在第一行就設置第一行為相應的顏色,如果占兩行就修改兩行*/ @RequiresApi(Build.VERSION_CODES.Q) fun CharSequence.toLineBackgroundSpan(range: IntRange, color: Int = Color.CYAN): SpannableString =SpannableString(this).apply {setSpan(LineBackgroundSpan.Standard(color),range.first,range.last,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 設置某一段文本的行的行高*/ @RequiresApi(Build.VERSION_CODES.Q) fun CharSequence.toLineHeightSpan(range: IntRange, height: Int): SpannableString =SpannableString(this).apply {setSpan(LineHeightSpan.Standard(height),range.first,range.last,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}

使用:

tvLeft.text = "12345".toStyleSpan(0..1).toSizeSpan(3..4)

總結

以上是生活随笔為你收集整理的好用的Span(富文本)api的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。