package Ġcom . l my . common . widget Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . os . Build Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . widget . Action Menu View Ċ import Ġcom . l my . common . ext . location In Window Ċ import Ġcom . l my . common . ext . getStatus Bar Height Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġ æĿİ æĺİ èīº Ġon Ġ 2 0 1 6 / 8 / 2 6 . Ċ Ġ* Ċ Ġ* Ġ@ author Ġal im in abc @ gmail . com Ċ Ġ*/ Ċ class ĠToolbar Ġ: Ġandroidx . appcompat . widget . Toolbar Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Menu View : ĠAction Menu View ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Title TextView : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Subtitle TextView : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Nav Button View : ĠImage Button ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġshould Ensure Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm StatusBar Height Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġm Old Height Ġ= Ġ- 1 ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġm StatusBar Height Ġ= Ġcontext . getStatus Bar Height () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfit System Windows ( in sets : ĠRect ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . fit System Windows ( in sets ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġensure Menu View () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġm Menu View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Menu View Ġ= Ġget View Field (" m Menu View ") Ġas ĠAction Menu View ĊĠĠĠĠĠĠĠĠĠĠĠ Ġensure View ( m Menu View !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġensure Nav Button View () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġm Nav Button View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Nav Button View Ġ= Ġget View Field (" m Nav Button View ") Ġas ĠImage Button ĊĠĠĠĠĠĠĠĠĠĠĠ Ġensure View ( m Nav Button View !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġensure View ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . layout ( view . left , Ġm StatusBar Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . right , Ġbottom ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æłĩé¢ĺ å±ħ ä¸Ń ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġensure Title View () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Title TextView Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Title TextView Ġ= Ġget View Field (" m Title TextView ") Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Title TextView Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Subtitle TextView Ġ= Ġget View Field (" m Subtitle TextView ") Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġm Subtitle TextView Ġ|| ĠText Utils . isEmpty ( m Subtitle TextView !!. text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġm Title TextView !!. meas ured Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġm Title TextView !!. meas ured Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġ( meas ured Width Ġ- Ġwidth ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfix Height Ġ= Ġ( meas ured Height Ġ- Ġm StatusBar Height Ġ- Ġheight ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Title TextView !!. layout ( left , Ġif Ġ( should Ensure ) Ġm StatusBar Height Ġ+ Ġfix Height Ġelse Ġm Title TextView !!. top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ+ Ġwidth , Ġif Ġ( should Ensure ) Ġm StatusBar Height Ġ+ Ġfix Height Ġ+ Ġheight Ġelse Ġm Title TextView !!. bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace (); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġheight Measure Spec Ġ= Ġheight Measure Spec ĊĠĠĠĠĠĠĠ Ġif Ġ( should Ensure ) Ġ{// ä¸İ çĬ¶æĢģ æłı éĩį åĲĪ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Old Height Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Old Height Ġ= ĠView . Measure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Measure Spec Ġ= ĠView . Measure Spec . make Measure Spec ( m Old Height Ġ+ Ġm StatusBar Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . get Mode ( height Measure Spec )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġl : ĠInt , Ġt : ĠInt , Ġr : ĠInt , Ġb : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Layout ( changed , Ġl , Ġt , Ġr , Ġb ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠLog . v ( Toolbar . class , Ġ" on Layout : Ġ" Ġ+ Ġchanged Ġ+ Ġ", Ġ" Ġ+ Ġshould Ensure ); ĊĠĠĠĠĠĠĠ Ġensure Title View () ĊĠĠĠĠĠĠĠ Ġif Ġ( should Ensure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġensure Menu View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġensure Nav Button View () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( w , Ġh , Ġold w , Ġold h ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! should Ensure ) ĊĠĠĠĠĠĠĠ Ġ// åĶ¯ä¸Ģ ç¡®å®ļ æĺ¯åĲ¦ éľĢè¦ģ éĩįæĸ° å¸ĥå±Ģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Ensure Ġ= ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP Ġ&& Ġm StatusBar Height Ġ> Ġlocation In Window ()[ 1 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( NullPointerException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġget View Field ( fieldName : ĠString ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġget Field ( fieldName ) ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġobj Ġ&& Ġobj Ġis ĠView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobj ĊĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" this Ġview Ġis Ġnull ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Field ( fieldName : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġjava Class . super class ?. getDeclared Field ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield ?. is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ?. get ( this ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Field Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ