Android软键盘挡住输入框

今天产品突然过来说APP登录界面软键盘遮挡了editText的输入框体验不好,确实是,那就开始操作:
在网上一查,打多数都是这样写的:
第一种

1

2

3

4

5

android:name=".MainActivity"

android:windowSoftInputMode="adjustPan" >

...

1

2

3

4

5

android:name=".MainActivity"

android:windowSoftInputMode="adjustResize" >

...

在manifests进行配置另一种在activity onCreate()之前写上这个代码getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
其实吧,这种确实可以实现键盘不被输入框遮挡:
* adjustPan是把整个界面向上平移,使输入框露出,不会改变界面的布局;
* adjustResize则是重新计算弹出软键盘之后的界面大小,相当于是用更少的界面区域去显示内容,输入框一般自然也就在内了,键盘被遮挡
当然不是说manifests activiy就不进行配置了,如果需要进入当前页面自动弹起键盘manifests中加入android:windowSoftInputMode="adjustResize",重要重要
有人说键盘是不挡住输入框了,我还要下面登录按钮也不被登录按钮遮挡,头疼,没事,我这儿一一实现:
接下来就来介绍我的方法呗:

咋样,效果还是可以的吧,这是登录界面ui,点击输入输入号码弹起键盘,addSoftKeyboardStateListener监听键盘是否弹起,弹起开始进行动画效果,比如把登录上面距离缩小,把货币下面的间距变小一点,来进行扩大键盘展开的空间,当然这样也是不够的,加点动画效果,要不就会变得界面有的突显,下面代码:
LinearLayout.LayoutParams lps = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(50)); //重新设置高度
lps.setMargins(0, DisplayUtils.dip2px(60), 0, 0);//int left, int top, int right, int bottom
mNumberText.setLayoutParams(lps); //控件写入
当然也有工具类进行对键盘的高度进行测量,给控件重新相对于的间距:
@Override
public void onGlobalLayout() {
    final Rect r = new Rect();
    //r will be populated with the coordinates of your view that area still visible.
    activityRootView.getWindowVisibleDisplayFrame(r);

    final int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
    if (!isSoftKeyboardOpened && heightDiff > activityRootView.getRootView().getHeight()/3) { // if more than 100 pixels, its probably a keyboard...
        isSoftKeyboardOpened = true;
        notifyOnSoftKeyboardOpened(heightDiff);
    } else if (isSoftKeyboardOpened && heightDiff < activityRootView.getRootView().getHeight()/3) {
        isSoftKeyboardOpened = false;
        notifyOnSoftKeyboardClosed();
    }
}
这样差不多也就完成了,一些动画可以根据给效果来进行编写。项目已上传:
地址:https://download.csdn.net/download/zyy_give/11126703

你可能感兴趣的:(Android,键盘遮挡输入框,键盘遮挡按钮)