今天产品突然过来说APP登录界面软键盘遮挡了editText的输入框体验不好,确实是,那就开始操作:
在网上一查,打多数都是这样写的:
第一种
1 2 3 4 5 |
|
1 2 3 4 5 |
|
在manifests进行配置另一种在activity onCreate()之前写上这个代码getWindow().setSoftInputMode(.SOFT_INPUT_ADJUST_PAN);
其实吧,这种确实可以实现键盘不被输入框遮挡:
* adjustPan是把整个界面向上平移,使输入框露出,不会改变界面的布局;
* adjustResize则是重新计算弹出软键盘之后的界面大小,相当于是用更少的界面区域去显示内容,输入框一般自然也就在内了,键盘被遮挡
当然不是说manifests activiy就不进行配置了,如果需要进入当前页面自动弹起键盘manifests中加入android:windowSoftInputMode="adjustResize",重要重要
有人说键盘是不挡住输入框了,我还要下面登录按钮也不被登录按钮遮挡,头疼,没事,我这儿一一实现:
接下来就来介绍我的方法呗:
咋样,效果还是可以的吧,这是登录界面ui,点击输入输入号码弹起键盘,addSoftKeyboardStateListener监听键盘是否弹起,弹起开始进行动画效果,比如把登录上面距离缩小,把货币下面的间距变小一点,来进行扩大键盘展开的空间,当然这样也是不够的,加点动画效果,要不就会变得界面有的突显,下面代码:
lps = new (.MATCH_PARENT, DisplayUtils.dip2px(50)); //重新设置高度
(0, DisplayUtils.dip2px(60), 0, 0);//int left, int top, int right, int bottom
(lps); //控件写入
当然也有工具类进行对键盘的高度进行测量,给控件重新相对于的间距:
@Override
public void onGlobalLayout() {
final Rect r = new Rect();
//r will be populated with the coordinates of your view that area still visible.
(r);
final int heightDiff = ().getHeight() - ( - );
if (!isSoftKeyboardOpened && heightDiff > ().getHeight()/3) { // if more than 100 pixels, its probably a keyboard...
isSoftKeyboardOpened = true;
notifyOnSoftKeyboardOpened(heightDiff);
} else if (isSoftKeyboardOpened && heightDiff < ().getHeight()/3) {
isSoftKeyboardOpened = false;
notifyOnSoftKeyboardClosed();
}
}
这样差不多也就完成了,一些动画可以根据给效果来进行编写。项目已上传:
地址:/download/zyy_give/11126703