Skip to content

Instantly share code, notes, and snippets.

@smartherd
Created November 8, 2020 13:31
Show Gist options
  • Save smartherd/988e041dedcb45383a10dd16df0d82ff to your computer and use it in GitHub Desktop.
Save smartherd/988e041dedcb45383a10dd16df0d82ff to your computer and use it in GitHub Desktop.
Spannable String
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textViewTwo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:text="Text Two"
android:textColor="@color/black"
android:textSize="22sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewOne" />
<TextView
android:id="@+id/textViewOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:text="Text One"
android:textColor="@color/black"
android:textSize="22sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textViewThree"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:text="Text Three"
android:textColor="@color/black"
android:textSize="22sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewTwo" />
</androidx.constraintlayout.widget.ConstraintLayout>
package com.sriyank.spannablestring
import android.graphics.Color
import android.graphics.Typeface
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.Spannable
import android.text.SpannableString
import android.text.SpannableStringBuilder
import android.text.TextPaint
import android.text.method.LinkMovementMethod
import android.text.style.*
import android.view.View
import android.widget.TextView
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textOneSpan()
textTwoSpan()
textThreeSpan()
}
private fun textOneSpan() {
val spannableStringBuilder = SpannableStringBuilder("Hi Sriyank Siddhartha.")
val fColor = ForegroundColorSpan(Color.RED)
spannableStringBuilder.setSpan(fColor, 0, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
val bColor = BackgroundColorSpan(Color.GREEN)
spannableStringBuilder.setSpan(bColor, 3, 21, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
spannableStringBuilder.append(" Welcome!")
textViewOne.text = spannableStringBuilder
}
private fun textTwoSpan() {
val spannableString = SpannableString("How are you?")
val sizeSpan = RelativeSizeSpan(2f)
spannableString.setSpan(sizeSpan, 0, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
val styleSpan = StyleSpan(Typeface.BOLD)
spannableString.setSpan(styleSpan, 0, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
val underlineSpan = UnderlineSpan()
spannableString.setSpan(underlineSpan, 8, 11, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
textViewTwo.text = spannableString
}
private fun textThreeSpan() {
val spannableString = SpannableString("Click to know")
val clickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
Toast.makeText(this@MainActivity, "I am great!", Toast.LENGTH_SHORT).show()
}
override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.color = Color.BLUE
ds.isUnderlineText = false
}
}
spannableString.setSpan(clickableSpan, 0, 13, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
textViewThree.text = spannableString
textViewThree.movementMethod = LinkMovementMethod.getInstance()
}
}
@smartherd
Copy link
Author

Use it as GIST and source code too. Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment