版权声明:本文为博主原创文章,未经博主允许不得转载。
先看图这是 修改之前
这样一看输入法挡住了 底下的登录按钮,很不爽,没关系,接下来看看处理后的效果
这样 就完全显示出 登录按钮了,下面 是代码
@Override
public void initView(Bundle savedInstanceState) {
final SizeChangeLinearLayout sizechangeL = (SizeChangeLinearLayout) findViewById(R.id.sizechangeL);
login_name = (EditText) findViewById(R.id.login_name);
logo_img = findViewById(R.id.logo_img);
login_passWord = (EditText) findViewById(R.id.login_passWord);
login_btn = (Button) findViewById(R.id.login_btn);
login_register = (TextView) findViewById(R.id.login_register);
login_forgetPassWord = (TextView) findViewById(R.id.login_forgetPassWord);
controlKeyboardLayout(sizechangeL, login_btn);
}
/**
* @param root
* 最外层布局,需要调整的布局
* @param scrollToView
* 被键盘遮挡的scrollToView,滚动root,使scrollToView在root可视区域的底部
*/
private void controlKeyboardLayout(final View root, final View scrollToView) {
root.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect rect = new Rect();
// 获取root在窗体的可视区域
root.getWindowVisibleDisplayFrame(rect);
// 获取root在窗体的不可视区域高度(被其他View遮挡的区域高度)
int rootInvisibleHeight = root.getRootView()
.getHeight() - rect.bottom;
// 若不可视区域高度大于100,则键盘显示
if (rootInvisibleHeight > 100) {
int[] location = new int[2];
// 获取scrollToView在窗体的坐标
scrollToView.getLocationInWindow(location);
// 计算root滚动高度,使scrollToView在可见区域
int srollHeight = (location[1]
+ scrollToView.getHeight() + PixelUtil
.dp2px(10)) - rect.bottom;
root.scrollTo(0, srollHeight);
} else {
// 键盘隐藏
root.scrollTo(0, 0);
}
}
});
}