-
-
Save m7mdra/305c40f6da0fa9e7ed3a22db3edb505f to your computer and use it in GitHub Desktop.
Easy Spannable on Kotlin
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
val spanned = spannable{ bold("some") + italic(" formatted") + color(Color.RED, " text") } | |
val nested = spannable { italic(underline(bold(size(2f, color(Color.RED, "Red Bold Color"))))) } | |
val noWrapping = bold("no ") + sub("wrapping ) + sup("also ") + "works" | |
text_view.text = spanned + nested + noWrapping |
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
import android.text.Spannable | |
import android.text.SpannableString | |
import android.text.TextUtils | |
import android.text.style.* | |
fun spannable(func: () -> SpannableString) = func() | |
private fun span(s: CharSequence, o: Any) = | |
(if (s is String) SpannableString(s) else s as? SpannableString | |
?: SpannableString("")).apply { setSpan(o, 0, length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) } | |
operator fun SpannableString.plus(s: SpannableString) = SpannableString(TextUtils.concat(this, s)) | |
operator fun SpannableString.plus(s: String) = SpannableString(TextUtils.concat(this, s)) | |
fun bold(s: CharSequence) = span(s, StyleSpan(android.graphics.Typeface.BOLD)) | |
fun bold(s: SpannableString) = span(s, StyleSpan(android.graphics.Typeface.BOLD)) | |
fun italic(s: CharSequence) = span(s, StyleSpan(android.graphics.Typeface.ITALIC)) | |
fun italic(s: SpannableString) = span(s, StyleSpan(android.graphics.Typeface.ITALIC)) | |
fun underline(s: CharSequence) = span(s, UnderlineSpan()) | |
fun underline(s: SpannableString) = span(s, UnderlineSpan()) | |
fun strike(s: CharSequence) = span(s, StrikethroughSpan()) | |
fun strike(s: SpannableString) = span(s, StrikethroughSpan()) | |
fun sup(s: CharSequence) = span(s, SuperscriptSpan()) | |
fun sup(s: SpannableString) = span(s, SuperscriptSpan()) | |
fun sub(s: CharSequence) = span(s, SubscriptSpan()) | |
fun sub(s: SpannableString) = span(s, SubscriptSpan()) | |
fun size(size: Float, s: CharSequence) = span(s, RelativeSizeSpan(size)) | |
fun size(size: Float, s: SpannableString) = span(s, RelativeSizeSpan(size)) | |
fun color(color: Int, s: CharSequence) = span(s, ForegroundColorSpan(color)) | |
fun color(color: Int, s: SpannableString) = span(s, ForegroundColorSpan(color)) | |
fun background(color: Int, s: CharSequence) = span(s, BackgroundColorSpan(color)) | |
fun background(color: Int, s: SpannableString) = span(s, BackgroundColorSpan(color)) | |
fun url(url: String, s: CharSequence) = span(s, URLSpan(url)) | |
fun url(url: String, s: SpannableString) = span(s, URLSpan(url)) | |
fun normal(s: CharSequence) = span(s, SpannableString(s)) | |
fun normal(s: SpannableString) = span(s, SpannableString(s)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment