Last active
September 27, 2019 03:31
-
-
Save cuber5566/b800eb50a31761b7b106c864105ba141 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fun SpannableStringBuilder.appendText(string: String, self: SpannableStringBuilder.() -> SpannableStringBuilder): SpannableStringBuilder { | |
val newSpan = SpannableStringBuilder(string) | |
self(newSpan) | |
return append(newSpan) | |
} | |
fun SpannableStringBuilder.color(color: Int): SpannableStringBuilder { | |
val span = ForegroundColorSpan(color) | |
setSpan(span, 0, length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) | |
return this | |
} | |
fun SpannableStringBuilder.size(textSize: Int): SpannableStringBuilder { | |
val span = AbsoluteSizeSpan(textSize) | |
setSpan(span, 0, length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) | |
return this | |
} | |
fun SpannableStringBuilder.style(typeface: Int): SpannableStringBuilder { | |
val span = StyleSpan(typeface) | |
setSpan(span, 0, length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) | |
return this | |
} | |
fun SpannableStringBuilder.underLine(): SpannableStringBuilder { | |
val span = UnderlineSpan() | |
setSpan(span, 0, length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) | |
return this | |
} | |
fun SpannableStringBuilder.backgroundColor(color: Int): SpannableStringBuilder { | |
val span = BackgroundColorSpan(color) | |
setSpan(span, 0, length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) | |
return this | |
} | |
fun SpannableStringBuilder.onClick(onClick:(View)->Unit): SpannableStringBuilder { | |
val span = object :ClickableSpan(){ | |
override fun onClick(view: View) { | |
onClick.invoke(view) | |
} | |
} | |
setSpan(span, 0, length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) | |
return this | |
} | |
fun SpannableStringBuilder.appendDrawable(drawable: Drawable, self: SpannableImageBuilder.() -> SpannableImageBuilder): SpannableStringBuilder { | |
val newSpan = SpannableImageBuilder(drawable) | |
newSpan.append("d") | |
self(newSpan) | |
val imageSpan = ImageSpan(newSpan.drawable, ImageSpan.ALIGN_BOTTOM) | |
newSpan.setSpan(imageSpan, 0, newSpan.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) | |
return append(newSpan) | |
} | |
fun SpannableImageBuilder.color(color: Int): SpannableImageBuilder { | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { | |
drawable.colorFilter = BlendModeColorFilter(color, BlendMode.SRC_IN) | |
} else { | |
drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN) | |
} | |
return this | |
} | |
fun SpannableImageBuilder.size(size: Int): SpannableImageBuilder { | |
drawable.setBounds(0, 0, size, size) | |
return this | |
} | |
fun SpannableImageBuilder.sizeFit(textView: TextView): SpannableImageBuilder { | |
val size = textView.lineHeight | |
drawable.setBounds(0, 0, size, size) | |
return this | |
} | |
data class SpannableImageBuilder( | |
var drawable: Drawable | |
) : SpannableStringBuilder() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment