閉塞処理キーボード入力ボックスのWebView

用com.hconline.iso.uicore.utilsパッケージ変更

インポートandroid.app.Activity 
インポートandroid.graphics.Rect 
インポートandroid.os.Build 
インポートandroid.provider.Settings 
インポートandroid.util.Log 
インポートandroid.view.View 
インポートandroid.view .WindowManager 
インポートandroid.widget.FrameLayout 

/ ** 
 *キーボードの入力ボックスのシャッターを処理するのWebView 
* /いいえバー下部のナビゲーション下のバーでフルページ/非フルスクリーン/ナビゲーション * / クラスWebViewKeyBoardListener( プライベートヴァル活動:活動 ){ プライベートVAR mChildOfContent :?ビュー= nullの プライベートVAR usableHeightPreviousます。int = 0 プライベートするvar frameLayoutParams:?FrameLayout.LayoutParams =ヌル 楽しさのinit(){ ヴァルコンテンツ=活性 .findViewById <表示>(android.R.id.content)でframeLayoutとして mChildOfContent = content.getChildAt(0) mChildOfContent !!。viewTreeObserver.addOnGlobalLayoutListener {possiblyResizeChildOfContent()} frameLayoutParams = mChildOfContent! FrameLayout.LayoutParamsとして.layoutParams } プライベートの楽しみpossiblyResizeChildOfContentは、(){ valをusableHeightNow = computeUsableHeight() (!usableHeightNow = usableHeightPrevious)であれば、{ valをusableHeightSansKeyboard = mChildOfContent !! rootView。 .height - getNavHeight() ヴァルheightDifference = usableHeightSansKeyboard - usableHeightNow IF(heightDifference> usableHeightSansKeyboard / 4){ //キーボードはおそらくちょうど目に見えるようになった frameLayoutParams !!高さ= usableHeightSansKeyboard - 。heightDifference {}他 //キーボードはおそらく隠さなった frameLayoutParams !!高さ= usableHeightSansKeyboard。 } mChildOfContent !! requestLayout()。 usableHeightPrevious = usableHeightNow } } プライベート楽しいcomputeUsableHeight()のInt { ヴァルR =のRect() 。mChildOfContent !! getWindowVisibleDisplayFrame(R) 戻りr.bottom - r.top } プライベート楽しいgetNavHeight()のInt { ヴァル資源= activity.resources RESOURCEID resources.getIdentifier =ヴァル( "navigation_bar_height"、 "DIMEN"、 "アンドロイド"); IF(RESOURCEID> 0){ //表示状態の下でナビゲーションバーか否かを判断する )(isNavigationBarShowing =ヴァルnavigationBarShowing (navigationBarShowing){IF ヴァル高resources.getDimensionPixelSize =(RESOURCEID) リターンの高さ } } リターン0 } プライベート楽しいisNavigationBarShowing():ブール{ //電話のナビゲーションバーの下をサポートするかどうかを決定 ヴァルhaveNavigationBar = checkDeviceHasNavigationBar() IF(haveNavigationBar){ IF(Build.VERSION。 SDK_INT>= 17){ ヴァルブランド= Build.BRAND ヴァルmDeviceInfo = { brand.toUpperCase()== "HUAWEI" - > "navigationbar_is_min" brand.toUpperCase()== "小米科技" - > "force_fsg_nav_bar" brand.toUpperCase()== "VIVO" - > "navigation_gesture_on" brand.toUpperCase()== "OPPO" - > "navigation_gesture_on" 他- > "navigationbar_is_min" } //是否全屏 ヴァルisFullScree = (activity.window.attributes.flagsとWindowManager.LayoutParams.FLAG_FULLSCREEN)== WindowManager.LayoutParams。FLAG_FULLSCREEN (Settings.Global.getInt(もし activity.contentResolver、 mDeviceInfo、 0 !)== 0 && isFullScree ){ trueを返す } } } リターン偽を } プライベート楽しいcheckDeviceHasNavigationBar():ブール{ VAR hasNavigationBar = falseを valのRS = activity.resources ヴァルID = rs.getIdentifier( "config_showNavigationBar"、 "ブール"、 "アンドロイド") (ID> 0)であれば{ hasNavigationBar = RS。getBoolean(ID) } {試みる ヴァルsystemPropertiesClass = Class.forNameの( "android.os.SystemProperties")。 ヴァルM = systemPropertiesClass.getMethod(文字列を"GET" :: class.java) ヴァルnavBarOverride = m.invoke(systemPropertiesClass、 "qemu.hw.mainkeys")文字列として IF( "1" == navBarOverride){ hasNavigationBar = FALSE }そうであれば( "0" == navBarOverride){ hasNavigationBar = TRUE } }キャッチ(E:例外){ e.printStackTrace() } 戻りhasNavigationBar } コンパニオン・オブジェクト{ 楽しみのgetInstance(活性:活性):WebViewKeyBoardListener { ヴァルkeyBoardListener = WebViewKeyBoardListener(活性) 戻りkeyBoardListener } } }

  

おすすめ

転載: www.cnblogs.com/ggband/p/12205028.html