记Android键盘adjustResize不为什么resize

2017-10-19  本文已影响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();

}

上一篇下一篇

猜你喜欢

热点阅读