package Ġcom . if an r . tang zhi . ui . widgets Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . widget . AppCompat TextView Ċ import Ġandroidx . core . view . children Ċ import Ġcom . if an r . tang zhi . R Ċ import Ġcom . if an r . tang zhi . ext . dp 2 px Ċ import Ġcom . if an r . tang zhi . ext . getColor Compat Ċ import Ġcom . if an r . tang zhi . ext . set Padding Ċ Ċ /** Ċ Ġ* Ġæ Ĳ ľç´¢ åİĨåı² åĴĮ çĥŃ éĹ¨ æİ¨èįĲ çļĦ æµģ å¼ı å¸ĥå±Ģ Ċ Ġ*/ Ċ class ĠSearch Key Flow Layout : ĠViewGroup Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġitem Padding Ġby Ġlazy Ġ{ Ġcontext . dp 2 px ( 1 0 ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġrow Padding Ġby Ġlazy Ġ{ Ġcontext . dp 2 px ( 1 0 ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġchildren Left Top Ġ= ĠArrayList < Point >() ĊĊĠĠĠ Ġvar Ġon Item Click : Ġ( position : ĠInt ) Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?) Ġ: Ġsuper ( context ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style Attr ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext ?, ĊĠĠĠĠĠĠĠ Ġattrs : ĠAttributeSet ?, ĊĠĠĠĠĠĠĠ Ġdef Style Attr : ĠInt , ĊĠĠĠĠĠĠĠ Ġdef Style Res : ĠInt ĊĠĠĠ Ġ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr , Ġdef Style Res ) ĊĊĠĠĠ Ġ@ Suppress Lint (" Draw Allocation ") ĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Children ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . make Measure Spec ( meas ured Width , ĠMeasure Spec . AT _ MO ST ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . make Measure Spec ( 0 , ĠMeasure Spec . UNSPECIFIED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren Left Top . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Height Ġ= Ġget Child At ( 0 ). meas ured Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġposition Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġleft Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtop Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġchild : ĠView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( position Ġ< Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Ġ= Ġget Child At ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Ġ+ Ġchild . meas ured Width Ġ<= Ġmeasured Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren Left Top . add ( position , ĠPoint ( left , Ġtop )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ+= Ġchild . meas ured Width Ġ+ Ġitem Padding ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æį¢ è¡Į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ+= Ġrow Height Ġ+ Ġrow Padding ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Measured Dimension ( meas ured Width , Ġtop Ġ+ Ġrow Height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġl : ĠInt , Ġt : ĠInt , Ġr : ĠInt , Ġb : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . forEach Indexed Ġ{ Ġindex , Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġchildren Left Top . get OrNull ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . layout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . x Ġ+ Ġchild . meas ured Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . y Ġ+ Ġchild . meas ured Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . layout ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetData ( data : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . forEach Indexed Ġ{ Ġindex , Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget OrCreate Child ( index ). text Ġ= Ġs ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrest Ġ= Ġchild Count Ġ- Ġdata . size ĊĠĠĠĠĠĠĠ Ġif Ġ( rest Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( rest ) Ġ{ Ġremove View At ( rest ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġchildren . forEach Indexed Ġ{ Ġindex , Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild . setOnClickListener Ġ{ Ġon Item Click . invoke ( index ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget OrCreate Child ( index : ĠInt ): ĠSearch Key TextView Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġchild Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Child At ( index ) Ġas ĠSearch Key TextView ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Key TextView ( context ). also Ġ{ Ġadd View ( it ) Ġ} Ċ } Ċ Ċ class ĠSearch Key TextView : ĠAppCompat TextView Ġ{ ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?) Ġ: Ġsuper ( context ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style Attr ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Text Size ( Typed Value . COMPLEX _ UNIT _ SP , Ġ 1 2 f ) ĊĠĠĠĠĠĠĠ Ġset TextColor ( context . getColor Compat ( R . color . base _ 1 2 )) ĊĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġel lip size Ġ= ĠText Utils . Truncate At . END ĊĠĠĠĠĠĠĠ Ġset Padding ( int ArrayOf ( 1 6 , Ġ 7 , Ġ 1 6 , Ġ 7 )) ĊĠĠĠĠĠĠĠ Ġbackground Ġ= ĠRo unded Rect Drawable ( context . getColor Compat ( R . color . base _ f 4 )) ĊĠĠĠ Ġ} Ċ }