/** Ċ Ġ* Ġ@ author ĠChen Fe i ( chen fe i 0 9 2 8 @ gmail . com ) Ċ Ġ* Ġ@ date Ġ 2 0 1 9 - 0 8 - 3 0 Ġ 1 8 : 3 4 Ċ Ġ*/ Ċ package Ġio . github . chen fe i 0 9 2 8 . view Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . graphics . Insets Ċ import Ġandroidx . core . view . Window Insets Compat Ċ import Ġandroidx . core . view . do On Pre Draw Ċ import Ġandroidx . core . view . update LayoutParams Ċ import Ġandroidx . core . view . update Padding Ċ Ċ fun ĠView . apply System Inset Top Margin () Ġ{ ĊĠĠĠ Ġval Ġoriginal Margin Top Ġ= ĠmarginTop ĊĠĠĠ Ġset On Apply Window Insets Compat Listener Ġ{ Ġ_, Ġtop , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠmarginTop Ġ= Ġoriginal Margin Top Ġ+ Ġtop ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠView . apply System Inset Top Padding () Ġ{ ĊĠĠĠ Ġval Ġoriginal Padding Top Ġ= Ġpadding Top ĊĠĠĠ Ġval Ġlp Mode Ġ= ĠView . Measure Spec . get Mode ( layout Params . height ) ĊĠĠĠ Ġval Ġlp Height Ġ= ĠView . Measure Spec . getSize ( layout Params . height ) ĊĠĠĠ Ġset On Apply Window Insets Compat Listener Ġ{ Ġ_, Ġtop , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġupdate Padding ( top Ġ= Ġoriginal Padding Top Ġ+ Ġtop ) ĊĠĠĠĠĠĠĠ Ġif Ġ( lp Mode Ġ!= ĠViewGroup . LayoutParams . WRAP _ CONTENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate LayoutParams Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġlp Height Ġ+ Ġtop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠView . apply System Inset Bottom Margin () Ġ{ ĊĠĠĠ Ġval Ġoriginal Margin Bottom Ġ= ĠmarginBottom ĊĠĠĠ Ġset On Apply Window Insets Compat Listener Ġ{ Ġ_, Ġ_, Ġ_, Ġbottom Ġ-> ĊĠĠĠĠĠĠĠ ĠmarginBottom Ġ= Ġoriginal Margin Bottom Ġ+ Ġbottom ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠView . apply System Inset Bottom Padding () Ġ{ ĊĠĠĠ Ġval Ġoriginal Padding Bottom Ġ= Ġpadding Bottom ĊĠĠĠ Ġval Ġlp Mode Ġ= ĠView . Measure Spec . get Mode ( layout Params . height ) ĊĠĠĠ Ġval Ġlp Height Ġ= ĠView . Measure Spec . getSize ( layout Params . height ) ĊĠĠĠ Ġset On Apply Window Insets Compat Listener Ġ{ Ġ_, Ġ_, Ġ_, Ġbottom Ġ-> ĊĠĠĠĠĠĠĠ Ġupdate Padding ( bottom Ġ= Ġoriginal Padding Bottom Ġ+ Ġbottom ) ĊĠĠĠĠĠĠĠ Ġif Ġ( lp Mode Ġ!= ĠViewGroup . LayoutParams . WRAP _ CONTENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate LayoutParams Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġlp Height Ġ+ Ġbottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġæ·»åĬł çªĹåı£ in sets çĽĳåĲ¬ ï¼Į çĶ¨äºİ çĽĳåĲ¬ çĬ¶æĢģ æłı ãĢģ å¯¼èĪª æłı é«ĺåº¦ æĪĸ å¼Ĥ å½¢ å±ı çļĦ ç¼º åı£ é«ĺåº¦ Ċ Ġ*/ Ċ fun ĠView . setOn Apply Window Insets Compat Listener ( in set Update : ĠView .( left : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġdo On Pre Draw Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Insets Compat . to Window Insets Compat ( root Window Insets ). system Window Insets ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIn sets . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Ui Util . getStatus Bar Height ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Ui Util . check Get NavigationBar Height ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinset Update ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT _ WATCH ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset On Apply Window Insets Listener Ġ{ Ġ_, Ġin sets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Insets Compat . to Window Insets Compat ( in sets ). system Window Insets . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinset Update ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin sets ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ