您的位置:首页 > 其它

文章标题

2016-03-03 01:06 232 查看

关于软键盘的问题记录

1.当软键盘弹出时导致EditText被遮挡

`/**

* @param root         最外层布局,需要调整的布局
* @param scrollToView 被键盘遮挡的scrollToView,滚动root,使scrollToView在root可视区域的底部
*/
public void controlKeyboardLayout(final View root, final View scrollToView) {
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.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()) - rect.bottom;
root.scrollTo(0, srollHeight);
} else {
//键盘隐藏
root.scrollTo(0, 0);
}
}
});
}`


将外部视图进行滚动

2.判断当前软键盘是否显示

/**
* 判断当前软键盘是否打开
* @param rootView 得到的Rect就是根布局的可视区域,而rootView.bottom是其本应的底部坐标值,
*                 如果差值大于我们预设的值,就可以认定键盘弹起了。这个预设值是键盘的高度的最小值。
*                 这个rootView实际上就是DectorView,通过任意一个View再getRootView就能获得。
* @return 当前是否显示软键盘
*/
private boolean isKeyboardShown(View rootView) {
final int softKeyboardHeight = 100;
Rect r = new Rect();
rootView.getWindowVisibleDisplayFrame(r);
DisplayMetrics dm = rootView.getResources().getDisplayMetrics();
int heightDiff = rootView.getBottom() - r.bottom;
return heightDiff > softKeyboardHeight * dm.density;
}


通过判断根布局(DectorView)距离屏幕底部的距离,当大与规定的默认值时软键盘显示。

InputMethodManager imm =(InputMethodManager)ac.getSystemService(Context.INPUT_METHOD_SERVICE);
//当软键盘显示时隐藏,当隐藏时显示
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);


两个方法结合起来就可以在控制软键盘状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  软键盘