文章链接:https://mp.weixin.qq.com/s/1gkMtLu0BTXOUOj6isDjUw

日常android开发过程中,会遇到编辑框输入内容弹出软键盘,往往会出现键盘遮挡内容,或者出现页面整体上移的,或多或少在体验上都不是很优雅,今天提供个方法是自行控制页面上移距离,竟可能让页面呈现给用户友好点。

一般我们会在AndroidManifest.xml 里配置windowSoftInputMode来控制键盘与页面的交互。

举个栗子,一个简单的登录页面。

adjustResize

activity 加<activity android:windowSoftInputMode="adjustResize">

adjustResize:Activity总是调整屏幕的大小以便留出软键盘的空间,可以看到页面整体上移,最下面的一行字也可以看到。

adjustPan

activity 加<activity android:windowSoftInputMode="adjustPan">

adjustPan:当前窗口的内容将自动移动以便当前焦点不被键盘覆盖,用户能总是看到输入内容的部分。

可以发现页面会自动移动,以便获取焦点的editText 不被键盘遮住,但是确定按钮被遮住了,用户需要自行隐藏键盘 再确定。

而我想要的效果是用户输入过程中 确定 按钮一直可见,且要底部的内容被遮挡,这就需要我们自己控制页面上移距离。

监听键盘弹出/隐藏的过程,获取键盘高度,计算需要上移的高度,以便按钮可见。

//监听键盘弹出/隐藏
container.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect rect = new Rect();
//getWindowVisibleDisplayFrame 获取当前窗口可视区域大小
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
int screenHeight = getWindow().getDecorView().getHeight();
//键盘弹出时,可视区域大小改变,屏幕高度 - 窗口可视区域高度 = 键盘弹出高度
int softHeight = screenHeight - rect.bottom;
/**
* 上移的距离 = 键盘的高度 - 按钮距离屏幕底部的高度(如果手机高度很大,上移的距离会是负数,界面将不会上移)
* 按钮距离屏幕底部的高度是用屏幕高度 - 按钮底部距离父布局顶部的高度
* 注意这里 btn.getBottom() 是按钮底部距离父布局顶部的高度,这里也就是距离最外层布局顶部高度
*/
int scrollDistance = softHeight - (screenHeight - btn.getBottom());
if (scrollDistance > 0) {
//具体移动距离可自行调整
container.scrollTo(0, scrollDistance + 60);
} else {
//键盘隐藏,页面复位
container.scrollTo(0, 0);
}
}
});

效果如下:



这样用户输入完成之后就可以直接点击确定按钮,体验上有所改善。

当然,具体使用哪种方法得看页面需求。

github地址:https://github.com/taixiang/Input

欢迎关注我的个人博客:https://www.manjiexiang.cn/

更多精彩欢迎关注微信号:春风十里不如认识你

一起学习,一起进步,欢迎上车,有问题随时联系,一起解决!!!

android 记一次解决键盘遮挡问题的更多相关文章

  1. 『零行代码』解决键盘遮挡问题(iOS)

    关注仓库,及时获得更新:iOS-Source-Code-Analyze https://github.com/draveness/iOS-Source-Code-Analyze Follow: Dra ...

  2. swift开发笔记24 解决键盘遮挡输入框 的方法

    很简单,就是开始输入时把整个view的frame上移,也就是把y值减小就行了,至于减少多少自己调 ,也可以动态获取参见(http://blog.csdn.net/lengshengren/articl ...

  3. iOS第三方解决键盘遮挡-IQKeyboardManager

    百度云:http://pan.baidu.com/s/1yg5ae githun:https://github.com/hackiftekhar/IQKeyboardManager AppDelega ...

  4. React-native键盘遮挡输入框问题的解决

    2016年10月25日更新: 现在有一个更准确一点的做法是用一个View包裹住TextInput,然后通过该View的onLayout方法获取该输入框的y轴位置,再减去一个适当的高度去处理scroll ...

  5. 键盘遮挡控件(textfield/textview.......)

    采用的是通知的常规方式 // 解决键盘遮挡问题//选择didShow是因为需要键盘的高度//选择willHide是因为视图frame重置需要优先于键盘消失,否则表现得不连贯 [[NSNotificat ...

  6. react-native 键盘遮挡输入框

    Android上已经自动对键盘遮挡输入框做了处理,所以我们只需要关注ios. 1.首先引入 KeyboardAvoidingView import { KeyboardAvoidingView } f ...

  7. Android软键盘遮挡的四种解决方案

    问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入 ...

  8. Android软键盘遮挡布局的那些事

    有朋友提到软键盘遮挡布局的问题,说网上找了很多资料都未能解决,下面我来总结一下那些事,有些内容也是从网友那里学来的,但是我都会自己验证正确了才会贴出来. 首先来分析下我们常见的遮挡问题有哪些(本次所说 ...

  9. Android软键盘遮挡布局问题;

    布局被软键盘遮挡虽然不是什么大问题,但还是比较影响用户体验的:最让人恼火的是当前输入框被软键盘被遮挡,来看一下解决方法: 1.当前输入框被软键盘遮挡,仅把输入框显示出来,不改变整体布局: 设置Mani ...

随机推荐

  1. FreeSql v0.5.x 功能介绍

    弱类型 之前在操作实体时,必须传统泛型参数,现在可以实现弱类型实体的操作.以 Repository 为例: var repos = fsql.GetGuidRepository<object&g ...

  2. renren-fast开源项目解析日志—1、项目的部署

    renren_fast项目解析日志 一.环境搭建 1.后端部署 (1)下载源码 按照步骤,从码云上down了fast,zip的(引maven项目)项目包. (2)安装lombok插件 安装lombok ...

  3. 通过 React Hooks 声明式地使用 setInterval

    本文由云+社区发表 作者:Dan Abramov 接触 React Hooks 一定时间的你,也许会碰到一个神奇的问题: setInterval 用起来没你想的简单. Ryan Florence 在他 ...

  4. 查看多核CPU各核的状态

    1 top  命令,然后按数字“1” 2  命令:mpstat -P ALL  3 命令:sar -P ALL 输出较多,可grep或者重定向至文件查看 个人推荐使用第二种方式,操作方便且输出较少,看 ...

  5. 45个值得收藏的 CSS 形状

    摘要: CSS炫技. 原文:45个值得收藏的 CSS 形状 作者:前端小智 Fundebug经授权转载,版权归原作者所有. CSS能够生成各种形状.正方形和矩形很容易,因为它们是 web 的自然形状. ...

  6. Sharepoint 2013内容查询Web部件自定义显示样式(实战)

    分享人:广州华软 星尘 一. 前言 在进行Sharepoint开发时,经常会遇到内容展示个性化需求的问题,当然如果通过自定义开发控件对于内容展示的需求基本都可以很好的解决,但自定义开发也有不好的地方, ...

  7. python的学习笔记01_1 python2和python3的区别和环境

    1.python2 与 python3 区别: 关于这两个版本的区别,从宏观上来讲: python2:源码不标准,混乱(很多技术大佬写的都有自己语言的特点,看起来很不pythoner)由于python ...

  8. github 进阶说明

    目录 github 进阶说明 前言 三个目录树 重置 git reset 增加路径的reset 检出 checkout 带路径的checkout 仓库 数据对象 其他 资料 github 进阶说明 前 ...

  9. 和我一起学习爬虫之HTTP/HTTPS抓包工具--Fiddler

    HTTP/HTTPS抓包工具--Fiddler Fiddler[ˈfɪdlə(r)] 1. HTTP代理神器Fiddler Fiddler是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP ...

  10. 排错:Windows系统异常导致Filebeat无法正常运行

    Windows 下Filebeat排错Case实例一份,请查收. 问题描述: Windows Server下Filebeat Agent服务无法正常启动,导致网络数据打点无法正常进行,影响大范围用户网 ...