android输入框显示在软键盘上方
有时候在界面需要输入的时候,如果输入框在界面的下方,软键盘弹出的时候会遮挡输入框界面,对用户的体验不是很好。
在网上找的别人的解决方案
首先:
清单文件里面配置:
android:windowSoftInputMode="adjustPan|stateHidden"
android:windowSoftInputMode="adjustResize|adjustUnspecified|stateHidden"
在需要组件上移的Activity 加入以下代码
private int mWindowHeight=0;
private ViewTreeObserver.OnGlobalLayoutListener mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
//获取当前窗口实际的可见区域
getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
int height = r.height();
if (mWindowHeight == 0) {
//一般情况下,这是原始的窗口高度
mWindowHeight = height;
} else {
if (mWindowHeight != height) {
//两次窗口高度相减,就是软键盘高度
int softKeyboardHeight = mWindowHeight - height;
flCont.setPadding(0, 0, 0, softKeyboardHeight);
}else {
flCont.setPadding(0, 0, 0, 0);
}
}
}
};
flCont 为你要显示在软键盘上的View。
注册:getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);
要在onDestroy()时销毁:getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(mGlobalLayoutListener);
xml 布局中最好把父布局,设置成 RelativeLayout FrameLayout ConstraintLayout 。