这篇博客主要是介绍在登陆界面,由于软键盘的弹出导致登录按钮不可见对于,造成不好额用户体验进行修改。
主要是实现,在输入账号和密码的使用使界面上移,到达登录按钮显示的效果。
本篇博客主要是通过LayoutParams实现 (弊端 效果是瞬间完成,可以通过Scroller或者动画实现平滑一定效果)
布局界面很简单就不给代码,文章最后会给上源码下载地址
核心代码
private void adjustLayout() {
root.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int height = root.getRootView().getHeight() - root.getHeight();
if (height > 100) { // 如果高度超过100像素 可能是软键盘 这个地方判断需要注意 是在没有ActionBa的前提
// 进行界面移动处理
// 如果软键盘已经显示 直接返回
if (showSoftInputFlag) {
return;
}
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)
inputBox.getLayoutParams();
// 计算软键盘弹出后 输入区域的上边距
params.topMargin = rootHeight - height - inputBox.getHeight();
inputBox.setLayoutParams(params);
// 设置注册按钮在软键盘弹出后不显示在可见界面上
params = (RelativeLayout.LayoutParams) register.getLayoutParams();
params.bottomMargin = -register.getHeight();
register.setLayoutParams(params);
// 修改是否显示软键盘的标记
showSoftInputFlag = true;
} else {
if (!saveOldDataFlag) { // 实现初始化原始值 方便后面软键盘隐藏以后界面恢复
rootHeight = root.getHeight();
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)
inputBox.getLayoutParams();
inputBoxTopMargin = params.topMargin;
params = (RelativeLayout.LayoutParams) register.getLayoutParams();
registerBottomMargin = params.bottomMargin;
saveOldDataFlag = true;
}
// 软键盘没有显示直接返回
if (!showSoftInputFlag) {
return;
}
// 回复界面在不显示软件盘时候的布局
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)
inputBox.getLayoutParams();
params.topMargin = inputBoxTopMargin;
inputBox.setLayoutParams(params);
params = (RelativeLayout.LayoutParams) register.getLayoutParams();
params.bottomMargin = registerBottomMargin;
register.setLayoutParams(params);
// 修改软件盘显示的标记
showSoftInputFlag = false;
}
}
});
}
还有一个需要注意的地方
在 清单文件文件中 配置该activity
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" 去掉actionbar有好多方法,这个看自己的实现吧
源码下载地址:
穿越吧,若曦