在我们的页面包含输入框时,我们往往希望用户点击输入框后,弹出的软键盘不挡住输入框,还有不挡住其他控件(比如用户协议的勾选框)。
这个问题,网上很多教程都是说在AndroidManifest中,把这个activity加个android:windowSoftInputMode="adjustResize",然后这个activity关联的layout的根标签改为ScrollView。
这样虽然能解决输入框被遮挡的问题,但是要想输入框下面的用户协议勾选框,也不被遮挡,就无法实现了。
这个时候我翻遍各种资料,终于灵光一闪,想到了下面这个方法。
在你activity的onCreate()方法中调用下面这个方法,就可以了。非常的简洁。当然其中的magic number 550你可以自己再修改一下,我就没去管了。
private void setListener() {
View rootView = findViewById(android.R.id.content);
// 监听全局布局变化
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = rootView.getRootView().getHeight() - rootView.getHeight();
if (heightDiff > 200) { // 软键盘弹出
// 这里可进行关键弹出时的处理
ScrollView scrollView = findViewById(R.id.login_form);
scrollView.smoothScrollTo(0,550);
} else { // 软键盘收起
// 进行关键收起时的处理
ScrollView scrollView = findViewById(R.id.login_form);
scrollView.smoothScrollTo(0,-550);
}
}
});
}