Advertisement
truongngoclinh

CustomLinkMovementMethod

May 19th, 2020
1,336
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.33 KB | None | 0 0
  1. // Listen to hyperlink tapped on text view
  2.  
  3. class CustomLinkMovementMethod(private val onUrlTapped: (String) -> Unit) : LinkMovementMethod() {
  4.  
  5.     override fun onTouchEvent(widget: TextView?, buffer: Spannable?, event: MotionEvent?): Boolean {
  6.         event?.let {
  7.             val action = event.action
  8.             if (action != MotionEvent.ACTION_UP)
  9.                 return super.onTouchEvent(widget, buffer, event)
  10.  
  11.             var x = event.x.toInt()
  12.             var y = event.y.toInt()
  13.  
  14.             widget?.let { v ->
  15.                 x -= v.totalPaddingLeft;
  16.                 y -= v.totalPaddingTop;
  17.                 x += v.scrollX;
  18.                 y += v.scrollY;
  19.  
  20.                 val layout = v.layout;
  21.                 val line = layout.getLineForOffset(y);
  22.                 val off = layout.getOffsetForHorizontal(line, x.toFloat());
  23.  
  24.                 val link = buffer?.getSpans(off, off, URLSpan::class.java)
  25.                 link?.let {
  26.                     if (it.isNotEmpty()) {
  27.                         val url = (it[0] as URLSpan).url;
  28.                         if (url.isNotEmpty()) {
  29.                             onUrlTapped.invoke(url)
  30.                         }
  31.                     }
  32.                 }
  33.  
  34.                 return true
  35.             }
  36.         }
  37.  
  38.         return super.onTouchEvent(widget, buffer, event)
  39.     }
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement