package Ġcom . har ish . y ify . presentation . util Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . view pager . widget . ViewPager Ċ import Ġcom . har ish . y ify . R Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġjava . util . ArrayList Ċ Ċ class ĠEn hance Tab Layout Ġ: ĠFrame Layout Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġretrieve ĠTab Layout ĠInstance ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtab Layout : ĠTab Layout ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġvar Ġm Tab List : ĠMutable List < String >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Custom View List : ĠMutable List < View >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Select Indicator Color : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Select TextColor : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Un Select TextColor : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Indicator Height : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Indicator Width : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Tab Mode : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Tab Text Size : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġval Ġcustom View List : ĠList < View >? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Custom View List ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( api Ġ= ĠBuild . VERSION _ CODES . LO L LI POP ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt , Ġdef Style Res : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr , Ġdef Style Res ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Attr ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . En hance Tab Layout ) ĊĠĠĠĠĠĠĠ Ġm Select Indicator Color Ġ= Ġtyped Array . getColor ( R . style able . En hance Tab Layout _ tab Indicator Color , Ġresources . getColor ( R . color . solid _ pink )) ĊĠĠĠĠĠĠĠ Ġm Un Select TextColor Ġ= Ġtyped Array . getColor ( R . style able . En hance Tab Layout _ tab TextColor , Ġresources . getColor ( R . color . do ve _ gray )) ĊĠĠĠĠĠĠĠ Ġm Select TextColor Ġ= Ġtyped Array . getColor ( R . style able . En hance Tab Layout _ tab Select TextColor , Ġresources . getColor ( R . color . solid _ pink )) ĊĠĠĠĠĠĠĠ Ġm Indicator Height Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . En hance Tab Layout _ tab Indicator Height , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġm Indicator Width Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . En hance Tab Layout _ tab Indicator Width , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġm Tab Text Size Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . En hance Tab Layout _ tab Text Size , Ġ 1 3 ) ĊĠĠĠĠĠĠĠ Ġm Tab Mode Ġ= Ġtyped Array . getInt ( R . style able . En hance Tab Layout _ tab _ Mode , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġread Attr ( context , Ġattrs ) ĊĊĠĠĠĠĠĠĠ Ġm Tab List Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġm Custom View List Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( getContext ()). inflate ( R . layout . en hance _ tab _ layout , Ġthis , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtab Layout Ġ= Ġview . findViewById ( R . id . en hance _ tab _ view ) ĊĊĊĠĠĠĠĠĠĠ Ġtab Layout !!. tab Mode Ġ= Ġif Ġ( m Tab Mode Ġ== Ġ 1 ) ĠTab Layout . MODE _ FIXED Ġelse ĠTab Layout . MODE _ SCROLL ABLE ĊĠĠĠĠĠĠĠ Ġtab Layout !!. add On Tab Selected Listener ( object Ġ: ĠTab Layout . On Tab Selected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Selected ( tab : ĠTab Layout . Tab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon Tab ItemSelected ( tab . getPosition ()); ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġtab Layout !!. tab Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġtab Layout !!. get Tab At ( i ) !!. custom View Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġview . findViewById < View >( R . id . tab _ item _ text ) Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindicator Ġ= Ġview . findViewById < View >( R . id . tab _ item _ indicator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġtab . position ) Ġ{ Ġ// Ġ éĢī ä¸Ń çĬ¶æĢģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . setTextColor ( m Select TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . set BackgroundColor ( m Select Indicator Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . setTextColor ( m Un Select TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Un selected ( tab : ĠTab Layout . Tab ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Re selected ( tab : ĠTab Layout . Tab ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd On Tab Selected Listener ( on Tab Selected Listener : ĠTab Layout . On Tab Selected Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtab Layout !!. add On Tab Selected Listener ( on Tab Selected Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġview Pager ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsetup With ViewPager ( view Pager : ĠView Pager ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtab Layout !!. add On Tab Selected Listener ( ViewPager On Tab Selected Listener ( view Pager !! , Ġthis )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġtab ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Tab ( tab : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Tab List !!. add ( tab ) ĊĠĠĠĠĠĠĠ Ġval Ġcustom View Ġ= Ġget Tab View ( context , Ġtab , Ġm Indicator Width , Ġm Indicator Height , Ġm Tab Text Size ) ĊĠĠĠĠĠĠĠ Ġm Custom View List !!. add ( custom View ) ĊĠĠĠĠĠĠĠ Ġtab Layout !!. add Tab ( tab Layout !!. new Tab (). set Custom View ( custom View )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠView Pager On Tab Selected Listener ( private Ġval Ġm ViewPager : ĠView Pager , Ġenhance Tab Layout : ĠEn hance Tab Layout ) Ġ: ĠTab Layout . On Tab Selected Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Tab Layout Ref : ĠWeak Reference < En hance Tab Layout >? ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Tab Layout Ref Ġ= ĠWeak Reference ( en hance Tab Layout ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Selected ( tab : ĠTab Layout . Tab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewPager . currentItem Ġ= Ġtab . position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Tab Layout Ġ= Ġm Tab Layout Ref !!. get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Tab Layout Ref Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom View List Ġ= Ġm Tab Layout !!. custom View List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( custom View List Ġ== Ġnull Ġ|| Ġcustom View List . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcustom View List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġcustom View List [ i ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġview . findViewById < View >( R . id . tab _ item _ text ) Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindicator Ġ= Ġview . findViewById < View >( R . id . tab _ item _ indicator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġtab . position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . setTextColor ( m Tab Layout . m Select TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . set BackgroundColor ( m Tab Layout . m Select Indicator Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . setTextColor ( m Tab Layout . m Un Select TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Un selected ( tab : ĠTab Layout . Tab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo - op ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Re selected ( tab : ĠTab Layout . Tab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo - op ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Tab View ( context : ĠContext , Ġtext : ĠString , Ġindicator Width : ĠInt , Ġindicator Height : ĠInt , Ġtext Size : ĠInt ): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . tab _ item _ layout , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtab Text Ġ= Ġview . findViewById < View >( R . id . tab _ item _ text ) Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Text . setTextColor ( context . resources . getColor ( R . color . do ve _ gray )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( indicator Width Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindicator Ġ= Ġview . findViewById < View >( R . id . tab _ item _ indicator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġindicator . layout Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . width Ġ= Ġindicator Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġindicator Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . layout Params Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Text . text Size Ġ= Ġtext Size . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Text . text Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }