在Activity中的布局的下方有EditText获取焦点弹出软键盘的时候,如果不作处理,软键盘可能会遮挡输入框或者一些按键,这样的用户体验比较差。
这里整理了几种处理方式,可以使页面整体上移。并且提供一种个人比较喜欢的方法。
网上常见的三种:
- 1.修改AndroidManifest.xml文件
Android:windowSoftInputMode="stateVisible|adjustResize"
- 2.在Activity中添加配置
在activity中的onCreate中setContentView之前写上这个代码:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
其实第二中方式与第一种是一样的,只不过放的位置不同而已。
- 3.在布局文件中添加ScrollView
把顶级的layout替换成ScrollView,或者说在顶级的Layout上面再加一层ScrollView。
这样就会把软键盘和输入框一起滚动了,软键盘会一直处于底部。
个人推荐
上面三种都是比较简单处理,但灵活性较低。软键盘使整体上移可能造成一些控件上移出屏幕无法展示。以下方式就可以比较灵活的控制底部显示的控件是什么。
先看下效果图:
软键盘.gif将如下方法放到onCreate初始化View之后就可以。
/**
* 1、获取main在窗体的可视区域
* 2、获取main在窗体的不可视区域高度
* 3、判断不可视区域高度
* ①大于180:键盘显示 获取Scroll的窗体坐标,算出main需要滚动的高度,使scroll显示。
* ②小于180:键盘隐藏
* 该值根据屏幕可以做出修改,在大屏手机上可以适当的调大,不然会出现问题。
*
* @param main 根布局
* @param scroll 需要显示的最下方View
*/
public void addLayoutListener(final View main, final View scroll) {
main.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
Rect rect = new Rect();
main.getWindowVisibleDisplayFrame(rect);
int mainInvisibleHeight = main.getRootView().getHeight() - rect.bottom;
if (mainInvisibleHeight > 180) {
int[] location = new int[2];
scroll.getLocationInWindow(location);
int scrollHeight = (location[1] + scroll.getHeight() + ((RelativeLayout.LayoutParams) scroll.getLayoutParams()).bottomMargin) - rect.bottom;
if (scrollHeight > 0) {
main.scrollTo(0, scrollHeight);
}
} else {
main.scrollTo(0, 0);
}
});
}
网友评论