package Ġcom . blank j . util code . util Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Input Method Manager Ċ Ċ /** Ċ Ġ* Ġ< pre > Ċ Ġ* Ġauthor : ĠBl ank j Ċ Ġ* Ġblog Ġ Ġ: Ġhttp :// blank j . com Ċ Ġ* Ġtime Ġ Ġ: Ġ 2 0 1 6 / 0 8 / 0 2 Ċ Ġ* Ġdesc Ġ Ġ: Ġ éĶ® çĽĺ çĽ¸åħ³ å·¥åħ· ç±» Ċ </ pre > Ġ* Ċ Ġ*/ Ċ object ĠKeyboard Utils Ġ{ ĊĊĊĠĠĠ Ġinterface ĠOn Soft Input Changed Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Soft Input Changed ( height : ĠInt ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġvar Ġs ContentView In visible Height Pre : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/* ĊĠ Ġ éģ¿åħį è¾ĵåħ¥ æ³ķ éĿ¢ æĿ¿ éģ ® æĮ ¡ ĊĠ Ġ< p > åľ¨ Ġmanifest . xml Ġä¸Ń Ġactivity Ġä¸Ń è®¾ç½® </ p > ĊĠ Ġ< p > android : window Soft Input Mode =" adjust Pan "</ p > Ċ Ġ*/ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬ¨æĢģ æĺ¾ç¤º è½¯ éĶ® çĽĺ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Ġactivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow Soft Input ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġactivity . getSystem Service ( Activity . INPUT _ METHOD _ SERVICE ) Ġas ? ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġvar Ġview Ġ= Ġactivity . current Focus ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) Ġview Ġ= ĠView ( activity ) ĊĠĠĠĠĠĠĠ Ġimm . show Soft Input ( view , ĠInput Method Manager . SHOW _ FOR CED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬ¨æĢģ æĺ¾ç¤º è½¯ éĶ® çĽĺ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġview Ġ è§ĨåĽ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow Soft Input ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= ĠUtils . app . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ? ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬ¨æĢģ éļĲèĹı è½¯ éĶ® çĽĺ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Ġactivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhide Soft Input ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġactivity . getSystem Service ( Activity . INPUT _ METHOD _ SERVICE ) Ġas ? ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġvar Ġview Ġ= Ġactivity . current Focus ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) Ġview Ġ= ĠView ( activity ) ĊĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( view . window Token , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬ¨æĢģ éļĲèĹı è½¯ éĶ® çĽĺ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġview Ġ è§ĨåĽ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhide Soft Input ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= ĠUtils . app . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ? ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( view . window Token , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪĩæį¢ è½¯ éĶ® çĽĺ æĺ¾ç¤º ä¸İ åĲ¦ çĬ¶æĢģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtoggle Soft Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= ĠUtils . app . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ? ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġimm . toggle Soft Input ( Input Method Manager . SHOW _ FOR CED , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ è½¯ éĶ® çĽĺ æĺ¯åĲ¦ åı¯ è§ģ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity ĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param ĠminHeight Of Soft Input Ġ è½¯ éĶ® çĽĺ æľĢå°ı é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true `: Ġåı¯ è§ģ < br ></ br >` false `: Ġä¸į åı¯ è§ģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġ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 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget ContentView In visible Height ( activity : ĠActivity ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent View Ġ= Ġactivity . findViewById < View >( android . R . id . content ) ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġcontent View . getWindow Visible Display Frame ( r ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcontent View . root View . height Ġ- Ġr . height () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æ³¨åĨĮ è½¯ éĶ® çĽĺ æĶ¹åıĺ çĽĳåĲ¬ åĻ¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param Ġlistener Ġlistener ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġregister Soft Input Changed Listener ( activity : ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener : ĠOn Soft Input Changed Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent View Ġ= Ġactivity . findViewById < View >( android . R . id . content ) ĊĠĠĠĠĠĠĠ Ġs ContentView In visible Height Pre Ġ= Ġget ContentView In visible Height ( activity ) ĊĠĠĠĠĠĠĠ Ġcontent View . view Tree Observer . add On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġget ContentView In visible Height ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s ContentView In visible Height Pre Ġ!= Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Soft Input Changed ( height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ContentView In visible Height Pre Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¿® å¤į è½¯ éĶ® çĽĺ åĨħåŃĺ æ³ Ħ æ¼ı ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġåľ¨ [ Activity . on Destroy ] ä¸Ń ä½¿çĶ¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġcontext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfix Soft Input Le aks ( context : ĠContext ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= ĠUtils . app . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ? ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġ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 ]) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĤ¹åĩ» å±ı å¹ķ ç©º çĻ½ åĮºåŁŁ éļĲèĹı è½¯ éĶ® çĽĺ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġæł¹æį® ĠEditText Ġ æīĢåľ¨ åĿĲæłĩ åĴĮ çĶ¨æĪ· çĤ¹åĩ» çļĦ åĿĲæłĩ çĽ¸ å¯¹ æ¯Ķ ï¼Į æĿ¥ åĪ¤æĸŃ æĺ¯åĲ¦ éļĲèĹı éĶ® çĽĺ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ éľĢ éĩį åĨĻ Ġdispatch Touch Event ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ åıĤçħ§ ä»¥ä¸ĭ æ³¨éĩĬ ä»£çłģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclick Blank Area 2 Hide Soft Input () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" Keyboard Utils ", Ġ" Please Ġrefer Ġto Ġthe Ġfollowing Ġcode .") ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġpublic Ġboolean Ġdispatch Touch Event ( Motion Event Ġev ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ev . getAction () Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Ġv Ġ= ĠgetCurrent Focus (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Should Hide Keyboard ( v , Ġev )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInput Method Manager Ġimm Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Input Method Manager ) Ġget System Service ( Context . INPUT _ METHOD _ SERVICE ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( v . getWindow Token (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInput Method Manager . HIDE _ NOT _ ALWAYS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . dispatch Touch Event ( ev ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġæł¹æį® ĠEditText Ġ æīĢåľ¨ åĿĲæłĩ åĴĮ çĶ¨æĪ· çĤ¹åĩ» çļĦ åĿĲæłĩ çĽ¸ å¯¹ æ¯Ķ ï¼Į æĿ¥ åĪ¤æĸŃ æĺ¯åĲ¦ éļĲèĹı éĶ® çĽĺ ĊĠĠĠ Ġprivate Ġboolean Ġis Should Hide Keyboard ( View Ġv , ĠMotion Event Ġevent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( v Ġ!= Ġnull Ġ&& Ġ( v Ġinstanceof ĠEditText )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint [] Ġl Ġ= Ġ{ 0 , Ġ 0 }; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . getLocation In Window ( l ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġleft Ġ= Ġl [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġl [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġtop Ġ+ Ġv . getHeight (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġleft Ġ+ Ġv . getWidth (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ!( event . getX () Ġ> Ġleft Ġ&& Ġevent . getX () Ġ< Ġright ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġevent . getY () Ġ> Ġtop Ġ&& Ġevent . getY () Ġ< Ġbottom ); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ; ĊĠĠĠ Ġ} ĊĠĠĠ Ġ*/ ĊĠĠĠ Ġ} Ċ } ĊĊ