package Ġch oo ong g . box . ext Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Input Method Manager Ċ Ċ /** Ċ Ġ* Ġ æĺ¾ç¤º è½¯ éĶ® çĽĺ Ċ Ġ*/ Ċ fun Ġshow Soft Input ( view : ĠView ?) Ġ{ ĊĠĠĠ Ġview ?. post Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġview . context . input Method Manager ĊĠĠĠĠĠĠĠ Ġview . is Focus able Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġview . is Focus able In Touch Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġview . request Focus () ĊĠĠĠĠĠĠĠ Ġimm . show Soft Input ( view , ĠInput Method Manager . SHOW _ FOR CED ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ éļĲèĹı è½¯ éĶ® çĽĺ Ċ Ġ*/ Ċ fun ĠContext . hide Soft Input () Ġ{ ĊĠĠĠ Ġval Ġactivity Ġ= ĠgetActivity () ĊĠĠĠ Ġval Ġview Ġ= Ġactivity ?. current Focus ĊĠĠĠ Ġif Ġ( view Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġactivity . input Method Manager ĊĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( view . window Token , Ġ 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ éļĲèĹı è½¯ éĶ® çĽĺ Ċ Ġ*/ Ċ fun Ġhide Soft Input ( dialog : ĠDialog ) Ġ{ ĊĠĠĠ Ġval Ġview Ġ= Ġdialog . window ?. peek Decor View () ĊĠĠĠ Ġif Ġ( view Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Method Manager Ġ= Ġdialog . context . input Method Manager ĊĠĠĠĠĠĠĠ Ġinput Method Manager . hide Soft Input From Window ( view . window Token , Ġ 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ åĪĩæį¢ éĶ® çĽĺ æĺ¾ç¤º ä¸İ åĲ¦ çĬ¶æĢģ Ċ Ġ*/ Ċ fun Ġtoggle Soft Input () Ġ{ ĊĠĠĠ Ġval Ġimm Ġ= ĠAPP . input Method Manager ĊĠĠĠ Ġimm . toggle Soft Input ( Input Method Manager . SHOW _ FOR CED , Ġ 0 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠåĪ¤æĸŃ è½¯ éĶ® çĽĺ æĺ¯åĲ¦ åı¯ è§ģ Ċ Ġ* Ċ Ġ* Ġ@ param Ġactivity ĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Ċ Ġ* Ġ@ param ĠminHeight Of Soft Input Ġ è¾ĵåħ¥ æ³ķ æľĢå°ı é«ĺåº¦ Ċ Ġ* Ġ@ return Ġ` true `: Ġyes < br ></ br >` false `: Ġno Ċ Ġ*/ Ċ fun Ġis Soft Input Visible ( activity : ĠActivity , ĠminHeight Of Soft Input : ĠInt Ġ= Ġ 2 0 0 ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġget ContentView In visible Height ( activity ) Ġ>= ĠminHeight Of Soft Input Ċ } Ċ Ċ /** Ċ Ġ* Ġ è½¯ éĶ® çĽĺ æĺ¾ç¤º çĽĳåĲ¬ Ċ Ġ*/ Ċ fun ĠActivity . on Keyboard Show Listener ( listener : Ġ( is Show : ĠBoolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġwindow . content View . view Tree Observer . add On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġwindow . decor View . getWindow Visible Display Frame ( rect ) ĊĠĠĠĠĠĠĠ Ġval Ġscreen Height Ġ= Ġwindow . decor View . root View . height ĊĠĠĠĠĠĠĠ Ġval Ġheight Difference Ġ= Ġscreen Height Ġ- Ġrect . bottom ĊĠĠĠĠĠĠĠ Ġif Ġ( height Difference Ġ> Ġscreen Height Ġ/ Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . invoke ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . invoke ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġget ContentView In visible Height ( activity : ĠActivity ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġcontent View Ġ= Ġactivity . findViewById < View >( android . R . id . content ) ĊĠĠĠ Ġval Ġout Rect Ġ= ĠRect () ĊĠĠĠ Ġcontent View . getWindow Visible Display Frame ( out Rect ) ĊĠĠĠ Ġreturn Ġcontent View . bottom Ġ- Ġout Rect . bottom Ċ } Ċ Ċ /** Ċ Ġ* Ġ ä¿® å¤į è½¯ éĶ® çĽĺ åĨħåŃĺ æ³ Ħ æ¼ı Ċ Ġ* Ċ Ġ* Ġ[ Activity . on Destroy ] åľ¨ éĶĢ æ¯ ģ æĹ¶ è°ĥçĶ¨ è¯¥ æĸ¹æ³ķ Ċ Ġ*/ Ċ fun Ġfix Soft Input Le aks ( context : ĠContext ?) Ġ{ ĊĠĠĠ Ġif Ġ( context Ġ== Ġnull ) Ġreturn ĊĠĠĠ Ġval Ġimm Ġ= ĠAPP . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠ Ġval Ġstr Arr Ġ= ĠarrayOf (" m Cur Root View ", Ġ" m Ser ved View ", Ġ" m Next Ser ved View ") ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclared Field Ġ= Ġimm . java Class . getDeclared Field ( str Arr [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! declared Field . is Accessible ) Ġdeclared Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġdeclared Field . get ( imm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj Ġ== Ġnull Ġ|| Ġobj Ġ! is ĠView ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj . context Ġ== Ġcontext ) Ġdeclared Field . set ( imm , Ġnull ) Ġelse Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( th : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }