美文网首页
记Android键盘adjustResize不为什么resize

记Android键盘adjustResize不为什么resize

作者: 巴彦格日顺 | 来源:发表于2017-10-19 08:54 被阅读0次

    最近在公司要做一个独立的app (不是main app)。但是遇到一个问题,每次键盘弹起的时候,整个view就变小了。这是可以理解的,因为我在manifest文件中设置的windowSoftInputMode="adjustResize"。这是我理解的resize。但是我注意到main app中是没有resize,我也要实现相同的效果。

    我看了下main app的manifest文件,发现softInputMode同样也是adjustResize。这时我猜肯定是有人做了什么手脚。可能是写了custom view,让view不会resize。但是看了半天layout文件,愣是没找到这样的一个custom view。那么可能是改了某个window的flag。但是在code里翻了半天,没发现哪个flag会影响这个。google了半天,大家都是问为什么adjustResize不好使。

    最后只能google中文试一试,果真让我找到了。原来android在加了SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN这个flag之后,adjustResize就会失效。所以通过加这个flag就可以实现键盘弹起但是屏幕不变的效果。

    同时记一下如何在全屏的adjustResize的情况下检测键盘的状态。主要思路就是利用全屏view的高度与当前可视的高度(没被键盘遮挡)的差值,如果差值大于一个阈值,就认为keyboard是显示的,否则是不显示的。

    这种方法在全的adjustResize的条件下也是有效的。

    
    @Override
    
    public void onGlobalLayout() {
    
    // Detect the actual display area of the fragment. mFragmentLayout is view we use in Fragment.onCreateView. 
    
    mFragmentLayout.getWindowVisibleDisplayFrame(mRect);
    
    // rect.top is set to status bar height when it is included in #getWindowVisibleDisplayFrame, and 0 otherwise.
    
    int systemUiPadding = mRect.top;
    
    int obstructedHeight = mFragmentLayout.getHeight() - mRect.height();
    
    int keyboardHeight = obstructedHeight  - systemUiPadding;
    
    // Use height to determine if keyboard is showing.
    
    boolean isKeyboardShowing = keyboardHeight > getKeyboardHeightThreshold();
    
    }
    
    

    相关文章

      网友评论

          本文标题:记Android键盘adjustResize不为什么resize

          本文链接:https://www.haomeiwen.com/subject/quoyuxtx.html