package Ġcar . pace . co fu . util . views Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . text . Layout Ċ import Ġandroid . util . Attribute Set Ċ import Ġcom . google . android . material . button . Material Button Ċ import Ġkotlin . math . ceil Ċ Ċ /** Ċ Ġ* ĠA Ġmaterial Ġbutton Ġthat Ġdoes Ġnot Ġautomatically Ġfill Ġthe Ġparent Ġwhen Ġit Ġis Ġmultiline Ċ Ġ* Ġbut Ġorient ates Ġon Ġthe Ġwide st Ġline Ġwhile Ġstill Ġbeing Ġcompatible Ġwith Ġicons Ċ Ġ* ĠIn sp ired Ġby Ġhttps :// stackoverflow . com / a / 1 3 2 0 3 7 2 9 / 2 5 4 9 8 2 8 Ċ Ġ*/ Ċ class ĠWrap Width Material Button Ġ: ĠMaterial Button Ġ{ ĊĊĠĠĠ Ġ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 ) ĊĊĠĠĠ Ġprivate Ġvar Ġactual Width To Parent Width Difference Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġis Drawing Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Ġ== Ġnull Ġ|| Ġlayout . line Count Ġ< Ġ 2 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Width Ġ= Ġget Actual Width ( layout ) ĊĠĠĠĠĠĠĠ Ġif Ġ( actual Width Ġ< Ġmeasured Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Width To Parent Width Difference Ġ= Ġmeasured Width Ġ- Ġactual Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Measured Dimension ( actual Width , Ġmeasured Height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcomputes Ġthe Ġactual Ġwidth Ġthe Ġview Ġshould Ġbe Ġmeasured Ġto Ġby Ġusing Ġthe Ġwidth ĊĠĠĠĠ Ġ* Ġof Ġthe Ġwide st Ġline Ġplus Ġthe Ġp add ings Ġfor Ġthe Ġcompound Ġdraw ables ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Actual Width ( layout : ĠLayout ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax LineWidth Ġ= Ġ( 0 Ġuntil Ġlayout . line Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġlayout . get LineWidth ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. max OrNull () Ġ?: Ġ 0 . 0 f ĊĠĠĠĠĠĠĠ Ġreturn Ġceil ( max LineWidth ). toInt () Ġ+ Ġcompound Padding Left Ġ+ Ġcompound Padding Right ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Drawing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġis Drawing Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġa Ġworkaround Ġto Ġmake Ġthe ĠTextView . on Draw Ġmethod Ġdraw Ġthe Ġtext Ġin Ġthe Ġnew Ġcentre Ġof Ġthe Ġview ĊĠĠĠĠ Ġ* Ġby Ġsub stract ing Ġhalf Ġof Ġthe Ġactual Ġwidth Ġdifference Ġfrom Ġthe Ġreturned Ġvalue ĊĠĠĠĠ Ġ* ĠThis Ġshould Ġonly Ġbe Ġdone Ġduring Ġdrawing Ġhowever , Ġsince Ġotherwise Ġthe Ġinitial Ġwidth Ġcalculation Ġwill Ġfail ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Compound Padding Left (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . get Compound Padding Left (). let Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Drawing ) Ġvalue Ġ- Ġactual Width To Parent Width Difference Ġ/ Ġ 2 Ġelse Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ } ĊĊ