【正确姿势】解决EditText软键盘引起的其他布局移动问题
来源:互联网 发布:机械优化设计 编辑:程序博客网 时间:2024/06/05 16:16
Android软键盘弹出时不把布局顶上去的解决方法
这个问题头疼了我好久,后来一次看其他APP的视频评论才有所启发。
1.第一次启动app都需要登录吧?在登录界面得到软键盘的高度,通过sp储存键盘高度,在登录界面初始化View的时候调用prepareGetSoftKeyBoardHight();
private void prepareGetSoftKeyBoardHight() { // 登录界面的根布局 final View root = findViewById(R.id.activity_login); root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); // r will be populated with the coordinates of your view that area still visible. root.getWindowVisibleDisplayFrame(r); int screenHeight = root.getRootView().getHeight(); int heightDiff = screenHeight - (r.bottom - r.top); int statusBarHeight = 0; if (heightDiff > 200){ // 键盘展开 try { statusBarHeight = UiUtils.getStatusBarHeight(); } catch (Exception e) { e.printStackTrace(); } int realKeyboardHeight = heightDiff - statusBarHeight; if (realKeyboardHeight > 200) { SharePrefUtil.create().save(SharePrefKey.KEY_BOARD_HIGHT_INT, realKeyboardHeight); } Logger.d("print", "软键盘高度: " + realKeyboardHeight); }else { // 键盘收起 } } }); }
2.在软键盘弹出引起界面变化,在这个界面监听键盘的打开和关闭,调用下面的函数,大功告成 (监听键盘弹起的网上一大堆,工作忙就不贴出了)
// 输入框整体的父布局的默认PaddingBottom private int parentDefPaddingBottom = -9999; private void changeInputMenuSpace(boolean isDef) { int keyBoardHight = UiUtils.getKeyBoardHight(); // 输入框整体的父布局 View parent = (View) inputMenu.getParent(); if (parentDefPaddingBottom == -9999) { parentDefPaddingBottom = parent.getPaddingBottom(); } if (isDef) { parent.setPadding(parent.getPaddingLeft(), parent.getPaddingTop(), parent.getPaddingRight(), parentDefPaddingBottom); return; } // 得到输入框整体在屏幕中的位置 int[] viewInScreen = new int[2]; inputMenu.getLocationOnScreen(viewInScreen); int viewInScreenY = viewInScreen[1]; int viewInScreenBottomY = viewInScreenY + inputMenu.getHeight(); // 输入框整体的底部与屏幕底部的距离 int bootomDis = UiUtils.getScreenHeight() - viewInScreenBottomY; Logger.d(this, "输入框整体的底部与屏幕底部的距离" + bootomDis); if (bootomDis >= keyBoardHight) { return; } if (parent.getPaddingBottom() == parentDefPaddingBottom) { parent.setPadding(parent.getPaddingLeft(), parent.getPaddingTop(), parent.getPaddingRight(), keyBoardHight); } }
下面贴出部分代码块,
1.键盘弹起
inputMenu.getPrimaryMenu().getEditText().setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (isInVideo) { changeInputMenuSpace(false); } } });
2.键盘展开落下回调里
@Override public void OnSoftKeyboardStateChanged(final boolean isKeyBoardShow, int keyboardHeight) { if (isInVideo) { hideVideoImCloseIcon(isKeyBoardShow); if (!isKeyBoardShow) { changeInputMenuSpace(true); } } }
阅读全文
0 0
- 【正确姿势】解决EditText软键盘引起的其他布局移动问题
- 软键盘引起的布局问题
- 解决点击edittext,弹出软键盘时布局往上顶的问题
- 软键盘的显示和隐藏的正确姿势
- 解决含EditText页面的软键盘自动弹出问题
- Android解决被软键盘遮挡的EditText问题
- 解决点击edittext时有时无法弹出软键盘的问题
- 解决EditText被软键盘覆盖的问题
- EditText 软键盘弹出方式探究 以及手动解决浸入式布局软键盘不顶起输入框或者顶掉整个UI的问题
- AlertDialog实现自定义布局以及解决EditText无法弹出软键盘或者软键盘弹出错误问题
- 软键盘挡住edittext的解决
- AlertDialog 自定义布局 以及 EditText 无法弹出软键盘的解决
- 如何解决软键盘干扰挤压布局控件的问题
- jvisualvm插件安装的正确姿势(解决网络问题)
- EditText弹出软键盘后布局上移问题
- edittext不弹出软键盘 及 弹出软键盘后,把整个布局顶起来的问题
- edittext不弹出软键盘 及 弹出软键盘后,把整个布局顶起来的问题
- Android 禁止editText弹出软键盘(带光标) 并解决其他editText弹出软键盘后 切换回来 小键盘隐藏
- php session使用
- 深入C#结构和类的区别
- Caffe学习(四)训练数据层设置和种类!
- Error:(1, 1) Error: 前言中不允许有内容。
- 小白的github初体验
- 【正确姿势】解决EditText软键盘引起的其他布局移动问题
- eclipse 配置Maven问题解决办法:新建maven工程时报错:Could not resolve archetype org.apache.maven.archetypes . 时间 2013
- 安桌Log打印封装类
- Java中File类创建文件
- spring4.1 请求rest接口406问题解决(转换JSON)
- offsetX, clientX, pageX, screenX, layerX,
- cookie的使用方法
- 【NIO引入】BIO、AIO与NIO的区别
- 计算机网络-运输层