package Ġru . touch in . rob os w ag . components . utils . movement methods Ċ Ċ import Ġandroid . text . Selection Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . method . Base Movement Method Ċ import Ġandroid . text . style . Clickable Span Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . widget . TextView Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠD ani il ĠBor is ov sk ii Ġon Ġ 2 9 / 0 7 / 2 0 1 9 . Ċ Ġ* ĠHelper Ġobject Ġfor Ġmake Ġclick able Ġa Ġpart Ġof ĠSp ann able String Ġwith ĠClick able Span Ġusing Ġcustom Ġhandler , Ċ Ġ* Ġand ĠNOT Ġintercept ing Ġthe Ġparent Ġview Ġhandler . Ċ Ġ* ĠIt Ġsolves Ġthis Ġproblem ĠâĢĵ Ġhttps :// stackoverflow . com / questions / 1 6 7 9 2 9 6 3 / android - click able span - intercept s - the - click - event Ċ Ġ* Ċ Ġ* ĠDon ` t Ġforget Ġafter Ġapplying Ġthis Ġmethod Ġto Ġmake Ġyour ĠTextView Ċ Ġ* Ġis Clickable Ġ= Ġfalse Ċ Ġ* Ġis Long Clickable Ġ= Ġfalse Ċ Ġ*/ Ċ object ĠClick able Movement Method Ġ: ĠBase Movement Method () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcan Select Ar bitr arily () Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( widget : ĠTextView , Ġtext : ĠSp ann able , Ġevent : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction : ĠInt Ġ= Ġevent . action Mask ed ĊĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠMotion Event . ACTION _ UP Ġ|| Ġaction Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġevent . x . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. minus ( widget . total Padding Left ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( widget . scroll X ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġevent . y . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. minus ( widget . total Padding Top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( widget . scroll Y ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= Ġwidget . layout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġlayout . getLine For Vertical ( y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoff Ġ= Ġlayout . get Offset For Horizontal ( line , Ġx . toFloat ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġtext . get Spans ( off , Ġoff , ĠClick able Span :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠMotion Event . ACTION _ UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink [ 0 ]. onClick ( widget ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelection . setSelection ( text , Ġtext . get Span Start ( link [ 0 ]), Ġtext . get Span End ( link [ 0 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelection . remove Selection ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinitialize ( widget : ĠTextView , Ġtext : ĠSp ann able ) Ġ= ĠSelection . remove Selection ( text ) Ċ Ċ } Ċ