package Ġcom . github . r ws bil ly ang . app base . util Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Mask Filter Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . style .* Ċ import Ġandroid . view . View Ċ Ċ /** Ċ Ġ* Ċ // usage 1 : Ċ span Ġ{ Ċ bold Ġ{ Ġ+ context . getString ( R . string . author ) Ġ} Ċ +" Ġ" Ċ if Ġ( author Url Ġ!= Ġnull ) Ġurl ( author Url ) Ġ{ Ġ+ author Ġ} Ġelse Ġ+ author Ċ } Ċ // usage 2 : Ċ my TextView . apply Ġ{ Ċ text Ġ= Ġspan Ġ{ Ċ font (" serif "){ +" I Ġam Ġfont "} Ċ ln () Ċ bold { Ġ+ Ġ" bold Ġtext "} Ċ ln () Ċ italic { Ġ+" italic " Ġ} Ċ ln () Ċ bold Italic { Ġ+" bold Italic " Ġ} Ċ ln () Ċ absolute Size ( 3 0 ){ Ġ+" 3 0 sp Ġfont ĠSize "} Ċ ln () Ċ relative Size ( 1 . 5 F ){ Ġ+" 1 . 5 Ġtimes Ġfont ĠSize "} Ċ ln () Ċ x Scale ( 2 . 0 F ){ +" x Scale Ġwith Ġ 2 " Ġ} Ċ ln () Ċ strike { +" strike Ġme "} Ċ ln () Ċ underline { +" underline Ġme "} Ċ ln () Ċ +" Y "; sup erscript { +" 2 "} Ċ ln () Ċ +" X "; sub script { +" 2 "} Ċ ln () Ċ backgroundColor ( Color . RED ){ +" backgroundColor Ġwith Ġred "} Ċ ln () Ċ foreground Color ( Color . BLUE ){ +" foreground Color Ġwith ĠBL UE "} Ċ ln () Ċ mask Filter ( Blur Mask Filter ( 5 f , ĠBl ur Mask Filter . Blur . NORMAL )) Ġ{ Ġ+" blur Ġtext " Ġ} Ċ ln () Ċ click able ({ toast (" you Ġclicked Ġme ")} ){ Ġ+" click me " Ġ} Ċ ln () Ċ url (" tel : 1 8 6 1 0 1 7 7 8 2 3 "){ Ġ+" contact Ġme " Ġ} Ċ ln () Ċ + Ġ" draw ale :" Ċ draw ale ( getResources (). get Drawable ( R . drawable . ic _ volume _ up _ black _ 2 4 dp )){ +" draw ale "} Ċ ln () Ċ bullet { + Ġ" bullet 1 "} Ċ ln () Ċ bullet { + Ġ" bullet 2 "} Ċ ln () Ċ relative Size ( 2 . 0 F ){ foreground Color ( Color . RED ){ +" æĥ Ĭ çĪ Ĩ ä»· ï¼ļ ï¿ ¥ 9 9 "}} Ċ +" åİŁ ä»· ï¼ļ" Ċ strike { relative Size ( 0 . 8 F ){ foreground Color ( Color . GRAY ){ +" ï¿ ¥ 3 9 9 "}} } Ċ } Ċ movement Method Ġ= ĠLink Movement Method . getInstance () Ċ } Ċ Ġ* Ġ*/ Ċ fun Ġspan ( init : ĠSpan Op ): ĠSp ann able Ġ{ ĊĠĠĠ Ġval Ġspan With Children Ġ= ĠSpan () ĊĠĠĠ Ġspan With Children . init () ĊĠĠĠ Ġreturn Ġspan With Children . build () Ċ } Ċ Ċ type alias ĠSpan Op Ġ= ĠSpan . () Ġ-> ĠUnit Ċ Ċ @ Suppress (" unused ") Ċ open Ġclass ĠSpan Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġspans Ġ= Ġempty List < Span >() ĊĊĠĠĠ Ġopen Ġfun Ġbuild ( builder : ĠSp ann able StringBuilder Ġ= ĠSp ann able StringBuilder ()): ĠSp ann able Ġ{ ĊĠĠĠĠĠĠĠ Ġspans . forEach Ġ{ Ġit . build ( builder ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġclass ĠNode ( val Ġspan : ĠAny ) Ġ: ĠSpan () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbuild ( builder : ĠSp ann able StringBuilder ): ĠSp ann able Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġbuilder . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . build ( builder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Span ( span , Ġstart , Ġbuilder . length , ĠSp anned . SPAN _ INCL USIVE _ EXCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠLeaf ( val Ġcontent : ĠAny ) Ġ: ĠSpan () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbuild ( builder : ĠSp ann able StringBuilder ): ĠSp ann able Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( content . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġadd Node å°Ĩ æ·»åĬł ä¸Ģä¸ª node ï¼Į ä¹Łå°±æĺ¯ å¯¹ å¤§ æĭ¬ åı· ä¸ŃçļĦ æĸĩæľ¬ ï¼Ī leaf ï¼ī æī§è¡Į æŁĲä¸ª span åĬ¨ ä½ľ ï¼Į åį³ å¯¹ å¤§ æĭ¬ åı· ä¸ŃçļĦ åĨħå®¹ æ·»åĬł æł¼å¼ı ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġadd Node ( what : ĠAny , Ġinit : ĠNode . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġspans Ġ+= ĠNode ( what ). apply ( init ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł ä¸Ģä¸ª plain åŃĹç¬¦ä¸² , åį³ å¤§ æĭ¬ åı· { Ġ+" xxx " Ġ} éĩĮ éĿ¢çļĦ ä»£çłģ å°Ĩ æ·»åĬł ä¸Ģä¸ª Leaf ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġoperator Ġfun ĠString . unary Plus () Ġ{ ĊĠĠĠĠĠĠĠ Ġspans Ġ+= ĠLeaf ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġln () Ġ{ ĊĠĠĠĠĠĠĠ Ġ+ "\ n " ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åŃĹ ä½ĵ Ġset Font Ġ Ġdefault , default - bold , mono space , serif , sans - serif ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġfont ( font : ĠString , Ġinit : ĠSpan . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Node ( Type face Span ( font ), Ġinit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnormal ( init : ĠSpan . () Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġadd Node ( Style Span ( Type face . NORMAL ), Ġinit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġé»ĺè®¤ æ·»åĬł ä¸Ģä¸ª bold ĠStyle Span ï¼Į ä¹Łåı¯ä»¥ æĺ¯ åħ¶å®ĥ Style Span ï¼Į å¹¶ æī§è¡Į åĲİ éĿ¢ å¤§ æĭ¬ åı· ä¸ŃçļĦ ä»£çłģ åĿĹ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġbold ( init : ĠSpan . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Node ( Style Span ( Type face . BOLD ), Ġinit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġitalic ( init : ĠSpan . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Node ( ĠStyle Span ( Type face . ITAL IC ), Ġinit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġbold Italic ( init : ĠSpan . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Node ( Style Span ( Type face . BOLD _ ITAL IC ), Ġinit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġabsolute Size ( size : ĠInt , Ġinit : ĠSpan . () Ġ-> ĠUnit Ġ){ ĊĠĠĠĠĠĠĠ Ġadd Node ( Absolute Size Span ( size ), init ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrelative Size ( pro portion : ĠFloat , Ġinit : ĠSpan . () Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġadd Node ( Relative Size Span ( pro portion ), init ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġx Scale ( pro portion : ĠFloat , Ġinit : ĠSpan . () Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġadd Node ( Scale X Span ( pro portion ), init ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġstrike ( init : ĠSpan . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Node ( Stri ke through Span (), Ġinit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġunderline ( init : ĠSpan . () Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġadd Node ( Underline Span (), init ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsup erscript ( init : ĠSpan . () Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġadd Node ( Sup erscript Span (), init ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġsub script ( init : ĠSpan . () Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġadd Node ( Sub script Span (), init ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¸º æĸĩæľ¬ è®¾ç½® èĥĮæĻ¯ èī² ï¼Į çĽ¸ å½ĵ äºİ TextView çļĦ setBackground () ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun ĠbackgroundColor ( color : ĠInt , Ġinit : ĠSpan . () Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġadd Node ( BackgroundColor Span ( color ), init ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFore ground Color Span ä¸º æĸĩæľ¬ è®¾ç½® åīį æĻ¯ èī² ï¼Į çĽ¸ å½ĵ äºİ TextView çļĦ setTextColor () ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġcolor ( color : ĠInt , Ġinit : ĠSpan . () Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġadd Node ( ForegroundColor Span ( color ), init ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġval Ġblur Mask : ĠMask Filter Ġ= Ġ ĠBl ur Mask Filter ( 5 f , ĠBl ur Mask Filter . Blur . NORMAL ); ĊĠĠĠĠ Ġ* Ġmask Filter ( Blur Mask Filter ( 5 f , ĠBl ur Mask Filter . Blur . NORMAL )) Ġ{ Ġ+" blur Ġtext " Ġ} ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġmask Filter ( filter : ĠMask Filter , Ġinit : ĠSpan . () Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġadd Node ( Mask Filter Span ( filter ), init ) ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġfun Ġraster izer ( init : ĠSpan . () Ġ-> ĠUnit ){ Ċ // ĠĠĠĠĠĠĠ Ġadd Node ( Raster izer Span (), init ) Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbullet ( color : ĠInt Ġ= ĠColor . BLACK , Ġinit : ĠSpan . () Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġadd Node ( Bullet Span ( android . text . style . Bullet Span . STANDARD _ GAP _ WIDTH , color ), init ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł ä¸Ģä¸ª click çĤ¹åĩ» äºĭä»¶ ï¼Į å¹¶ æī§è¡Į åĲİ éĿ¢ å¤§ æĭ¬ åı· ä¸ŃçļĦ ä»£çłģ åĿĹ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġclick able ( onClick : Ġ() Ġ-> ĠUnit , Ġinit : ĠSpan . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġobject : Ġ ĠClick able Span () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Node ( span , Ġinit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł ä¸Ģä¸ª URL Span ï¼Į å¹¶ æī§è¡Į åĲİ éĿ¢ å¤§ æĭ¬ åı· ä¸ŃçļĦ ä»£çłģ åĿĹ ĊĠĠĠĠ Ġ* ĠæĶ¯æĮģ ï¼ļ http :// www . baidu . com ĠĠĠĠ Ġmail to : web master @ google . com ĊĠĠĠĠ Ġ* Ġtel : 4 1 5 5 5 5 1 2 1 2 ĠĠĠĠ Ġsms : 4 1 5 5 5 5 1 2 1 2 ĠĠĠ Ġm ms : 4 1 5 5 5 5 1 2 1 2 ĊĠĠĠĠ Ġ* Ġgeo : 3 8 . 8 9 9 5 3 3 ,- 7 7 . 0 3 6 4 7 6 ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġurl ( url : ĠString , Ġinit : ĠSpan . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Node ( URL Span ( url ), Ġinit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdrawable ( drawable : ĠDrawable , align : Int = ĠImage Span . ALIGN _ BOTTOM , init : ĠSpan . () Ġ-> ĠUnit ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Drawable Margin Span ĠIcon Margin Span ĊĠĠĠĠĠĠĠ Ġadd Node ( ĠImage Span ( drawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġset Bounds ( 0 , Ġ 0 , Ġget Intr insic Width (), Ġget Intr insic Height ()) Ġ}, align ), Ġinit ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç®Ģåįķ åľ° è§£æŀĲ åįķ ä¸ª æłĩçŃ¾ Ġ éĻĲåĪ¶ ï¼ļ ä¸į æĶ¯æĮģ åµ Į å¥Ĺ æłĩçŃ¾ ï¼Į ä¸į æĶ¯æĮģ æĭ¥ æľī å±ŀæĢ§ çļĦ æłĩçŃ¾ ĊĠĠĠĠ Ġ* Ġ@ param Ġhtml , Ġhtml Ġtext ĊĠĠĠĠ Ġ* Ġ@ param Ġtag , Ġsuch Ġas Ġp , Ġ, span , Ġdiv Ġetc . ĊĠĠĠĠ Ġ* Ġ@ param Ġtag Span Ġ æłĩçŃ¾ åĨħ çļĦ æĸĩæľ¬ æł¼å¼ı ï¼Į ĊĠĠĠĠ Ġ* Ġ@ param Ġplain Span Ġ æłĩçŃ¾ å¤ĸ çļĦ æĸĩæľ¬ æł¼å¼ı ĊĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġval Ġhtml Ġ= Ġ" bl ab la Ġ< p > bl ax xxx </ p > Ġ Ġy yyyy yy Ġ Ġ< p > xxxx </ p > Ġ Ġs sss " ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġparse Html ( html , Ġ" b ", Ġ{ Ġstr Ġ-> Ġitalic Ġ{ color ( font Color ){ Ġ+ str Ġ} Ġ} Ġ},{ str Ġ-> Ġnormal Ġ{ Ġ+ str Ġ}}) ĊĠĠĠĠ Ġ* Ġ</ pre > ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġparse Html With Single Tag ( html : ĠString , Ġtag : String , Ġtag Span : ĠSpan .( String ) Ġ-> ĠUnit , Ġplain Span : Span .( String ) Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġ"< $ tag >" ĊĠĠĠĠĠĠĠ Ġval ĠstartIndex Ġ= Ġhtml . indexOf ( start , 0 , true ) ĊĊĠĠĠĠĠĠĠ Ġif ( startIndex < 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplain Span ( html ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// + html ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplain Span ( html . substring ( 0 , ĠstartIndex )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġ"</ $ tag >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Index Ġ= Ġhtml . indexOf ( end , startIndex + start . length , true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Span ( html . substring ( startIndex + start . length , Ġend Index )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( end Index Ġ+ Ġend . length Ġ< Ġhtml . length ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Html With Single Tag ( html . substring ( end Index Ġ+ Ġend . length , Ġhtml . length ), tag , tag Span , plain Span ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊĊ