2

I am using localization in my app.

english : `<![CDATA[Makan <b>daging</b> adalah terlalu banyak karbohidrat]]>`
indonesia : `<![CDATA[Eating <b>meat</b> is too much carbohydrates]]>`

then in activity i write :

class MainActivity: AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        setupView()
    }

    private fun setupView() {
        val htmlSpan = SpannableString(HtmlCompat.fromHtml(
            getString(R.string.click_me_button),
            HtmlCompat.FROM_HTML_MODE_COMPACT
        ))
        val styleSpan = htmlSpan.getSpans(0, htmlSpan.length, StyleSpan::class.java).first()
        val spanStart = htmlSpan.getSpanStart(styleSpan)
        val spanEnd = htmlSpan.getSpanEnd(styleSpan)
        val clickSpan = object:ClickableSpan() {
            override fun onClick(widget: View) {
                Toast.makeText(this@MenghubungkanProdukActivity, "Hehehehe", Toast.LENGTH_LONG).show()
                Timber.d("HEHEHE")
            }
        }
        htmlSpan.setSpan(clickSpan, spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

        binding.textWarning.text = htmlSpan
    }
}

But clickSpan doesn't triggered. what's wrong with it?

zihadrizkyef
  • 1,849
  • 3
  • 23
  • 46

1 Answers1

1

Actually my code is working. But I just realized that I didn't set the movementMethod of the TextView

so the solution is to add this line :

binding.textWaring.movementMethod = LinkMovementMethod.getInstance()

So it will look like this :

private fun setupTextWarning() {
    val htmlSpan = SpannableString( ... )
    val moreSpan = htmlSpan.getSpans(0, htmlSpan.length, StyleSpan::class.java).first()
    val spanStart = htmlSpan.getSpanStart(moreSpan)
    val spanEnd = htmlSpan.getSpanEnd(moreSpan)
    val clickSpan = object : ClickableSpan() { ... }
    htmlSpan.setSpan(clickSpan, spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

    binding.textWarning.text = htmlSpan
    binding.textWarning.movementMethod = LinkMovementMethod.getInstance()
}
zihadrizkyef
  • 1,849
  • 3
  • 23
  • 46