好用的Span(富文本)api
生活随笔
收集整理的這篇文章主要介紹了
好用的Span(富文本)api
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
/*** 將一段文字中指定range的文字改變大小* @param range 要改變大小的文字的范圍 ps:你關(guān)注的${name}也關(guān)注了你喲 = 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 目標(biāo)文字的范圍* @param isUnderlineText 是否加上下劃線* 注意:需要同時給tv設(shè)置下面兩個* tv.movementMethod = LinkMovementMethod.getInstance()//使點擊生效* tv.highlightColor = R.color.transparent.toColor()//使點擊相應(yīng)位置后不留下背景色(透明)*/
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)}/*** 某一段文本設(shè)置樣式* [style]BOLD加粗,ITALIC斜體,BOLD_ITALIC加粗并設(shè)置斜體*/
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設(shè)置數(shù)學(xué)下標(biāo)*/
fun CharSequence.toSubscriptSpan(range: IntRange): SpannableString =SpannableString(this).apply {setSpan(SubscriptSpan(), range.first, range.last, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 某一段文本上浮,可配合大小span設(shè)置數(shù)學(xué)上標(biāo)(次方)*/
fun CharSequence.toSuperscriptSpan(range: IntRange): SpannableString =SpannableString(this).apply {setSpan(SuperscriptSpan(), range.first, range.last, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)}/*** 某一段文本相應(yīng)的行設(shè)置顏色,比如0..10,如果這幾個字只在第一行就設(shè)置第一行為相應(yīng)的顏色,如果占兩行就修改兩行*/
@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)}/*** 設(shè)置某一段文本的行的行高*/
@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)總結(jié)
以上是生活随笔為你收集整理的好用的Span(富文本)api的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gradle自动化之自动打包并上传到fi
- 下一篇: 解决:The application c