package Ġmy . it gun gn ir . ui . rich _ text Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . Text Paint Ċ import Ġandroid . text . style .* Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġmy . it gun gn ir . ui . rich _ text . param . Click Param Ċ import Ġmy . it gun gn ir . ui . rich _ text . param . Image Param Ċ Ċ /** Ċ Ġ* Ġhttps :// www . jian shu . com / p / f 0 0 4 3 0 0 c 6 9 2 0 Ċ Ġ*/ Ċ class ĠRich Text Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcontent : ĠCharSequence Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġvar Ġflags : ĠInt Ġ= ĠSp anned . SPAN _ EXCL USIVE _ EXCL USIVE ĊĊĠĠĠ Ġprivate Ġval Ġsp ann able StringBuilder Ġ= ĠSp ann able StringBuilder () ĊĊĠĠĠ Ġprivate Ġvar Ġback Color : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfore Color : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmiddle Line : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġunder Line : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġabsolute Size : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġrelative Size : ĠFloat ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbold : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġitalic : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar ĠonClick : ĠClick Param ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġimage : ĠImage Param ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun ĠsetDefault () Ġ{ ĊĠĠĠĠĠĠĠ Ġflags Ġ= ĠSp anned . SPAN _ EXCL USIVE _ EXCL USIVE ĊĠĠĠĠĠĠĠ Ġback Color Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfore Color Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmiddle Line Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġunder Line Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġabsolute Size Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġrelative Size Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġbold Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġitalic Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠonClick Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġimage Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Last () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠ ĠsetDefault () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ è¿½åĬł åŃĹç¬¦ä¸² ĊĠĠĠ Ġfun Ġappend ( content : ĠCharSequence ): ĠRich Text Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġapply Last () ĊĠĠĠĠĠĠĠ Ġthis . content Ġ= Ġcontent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ èĥĮæĻ¯ èī² ĊĠĠĠ Ġfun Ġback Color ( color : ĠInt ): ĠRich Text Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . back Color Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ åīį æĻ¯ èī² ĊĠĠĠ Ġfun Ġfore Color ( color : ĠInt ): ĠRich Text Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . fore Color Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠåĪłéĻ¤ çº¿ ĊĠĠĠ Ġfun Ġmiddle Line (): ĠRich Text Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . middle Line Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġä¸ĭ åĪĴ çº¿ ĊĠĠĠ Ġfun Ġunder Line (): ĠRich Text Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . under Line Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ ç»Ŀ å¯¹ åŃĹ ä½ĵ ĊĠĠĠ Ġfun Ġabsolute Size ( size : ĠInt ): ĠRich Text Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . absolute Size Ġ= Ġsize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ çĽ¸ å¯¹ åŃĹ ä½ĵ ĊĠĠĠ Ġfun Ġrelative Size ( size : ĠFloat ): ĠRich Text Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . relative Size Ġ= Ġsize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ åĬł ç² Ĺ ĊĠĠĠ Ġfun Ġbold (): ĠRich Text Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . bold Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ æĸ ľ ä½ĵ ĊĠĠĠ Ġfun Ġitalic (): ĠRich Text Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . italic Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ çĤ¹åĩ» äºĭä»¶ ĊĠĠĠ Ġfun ĠonClick ( textColor : ĠInt , Ġunder Line : ĠBoolean , Ġshadow : ĠBoolean , Ġclick Callback : Ġ( View ) Ġ-> ĠUnit ): ĠRich Text Ġ= ĊĠĠĠĠĠĠĠ Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . onClick Ġ= ĠClick Param ( textColor , Ġunder Line , Ġshadow , Ġclick Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġæ·»åĬł åĽ¾çīĩ ĊĠĠĠ Ġfun Ġimage ( context : ĠContext , Ġimg Res : ĠInt ): ĠRich Text Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . image Ġ= ĠImage Param ( context , Ġimg Res ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠçĶŁæĪĲ åŃĹç¬¦ä¸² ĊĠĠĠ Ġfun Ġcreate (): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġapply Last () ĊĠĠĠĠĠĠĠ Ġreturn Ġsp ann able StringBuilder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( content . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġsp ann able StringBuilder . length ĊĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . append ( content ) ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġsp ann able StringBuilder . length ĊĊĠĠĠĠĠĠĠ Ġback Color ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . set Span ( BackgroundColor Span ( it ), Ġstart , Ġend , Ġflags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfore Color ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . set Span ( ForegroundColor Span ( it ), Ġstart , Ġend , Ġflags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( middle Line ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . set Span ( Stri ke through Span (), Ġstart , Ġend , Ġflags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( under Line ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . set Span ( Underline Span (), Ġstart , Ġend , Ġflags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġabsolute Size ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . set Span ( Absolute Size Span ( it , Ġtrue ), Ġstart , Ġend , Ġflags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrelative Size ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . set Span ( Relative Size Span ( it ), Ġstart , Ġend , Ġflags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . set Span ( Style Span ( Type face . BOLD ), Ġstart , Ġend , Ġflags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( italic ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . set Span ( Style Span ( Type face . ITAL IC ), Ġstart , Ġend , Ġflags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠonClick ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġobject Ġ: ĠClick able Span () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . shadow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( view Ġas ĠTextView ). highlight Color Ġ= ĠColor . TRANSP ARENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . click Callback . invoke ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate Draw State ( ds : ĠText Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġds . color Ġ= Ġit . textColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġds . is Underline Text Ġ= Ġit . under Line ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġds . clear Shadow Layer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . set Span ( span , Ġstart , Ġend , Ġflags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġimage ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . set Span ( Image Span ( it . context , Ġit . img Res ), Ġstart , Ġend , Ġflags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }