package Ġcom . sy l log is mobile . custom _ layout _ in flater Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ Ċ class ĠCustom LayoutInflater ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġparent : ĠLayoutInflater Ġ= ĠLayoutInflater . from ( context ) Ċ ) Ġ: ĠLayoutInflater ( parent , Ġcontext ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġregistered App liers : ĠMutable Map < String , Ġ( View , ĠString ) Ġ-> ĠUnit > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfactory 2 Ġ= ĠWrapper Factory ( factory 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister App lier ( tag : ĠString , Ġapp lier : Ġ( view : ĠView , Ġvalue : ĠString ) Ġ-> ĠUnit ): ĠCustom LayoutInflater Ġ{ ĊĠĠĠĠĠĠĠ Ġregistered App liers [ tag ] Ġ= Ġapp lier ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclone In Context ( new Context : ĠContext ): ĠLayoutInflater Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCustom LayoutInflater ( new Context , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġname : ĠString ?, ĊĠĠĠĠĠĠĠ Ġattrs : ĠAttributeSet ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( prefix Ġin Ġandroid Prefixes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġcreate View ( name , Ġprefix , Ġattrs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull ) Ġreturn Ġview . apply Ġ{ Ġrun App liers ( this , Ġattrs ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass NotFoundException ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate View ( name , Ġattrs )?. apply Ġ{ Ġrun App liers ( this , Ġattrs ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun App liers ( view : ĠView , Ġattrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attrs Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( registered Tag Ġin Ġregistered App liers . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs . getAttribute Value ( NAMESPACE , Ġregistered Tag )?. let Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistered App liers [ registered Tag ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ( view , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠWrapper Factory ( private Ġval Ġoriginal Factory : ĠFactory 2 ?) Ġ: ĠFactory 2 Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate View ( name : ĠString , Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġoriginal Factory ?. onCreate View ( name , Ġcontext , Ġattrs )?. apply Ġ{ Ġrun App liers ( this , Ġattrs ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate View ( parent : ĠView ?, Ġname : ĠString , Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġoriginal Factory ?. onCreate View ( parent , Ġname , Ġcontext , Ġattrs )?. apply Ġ{ Ġrun App liers ( this , Ġattrs ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġandroid Prefixes Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" android . widget .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" android . webkit .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" android . app ." ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNAMES PACE Ġ= Ġ" http :// sy l log is mobile . wordpress . com /" ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( context : ĠContext ): ĠCustom LayoutInflater Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCustom LayoutInflater ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }