完美解决 手机软键盘遮挡问题
遇到的问题
同事的项目在做登陆的时候遇到个问题,就是弹出软键盘把按钮遮挡了。网上好多方法 试了一遍效果都不好。
那么我们该如何解决这个问题呢?
解决思路
- 弄个scrollview,让软键盘把scrollview顶上去
- 不弄scrollview。让软键盘把 输入框顶上去,其他的图片用属性动画移走或者不显示。
效果图
用到的技术
- 监听软键盘 开启和关闭
- 获取控件的高度
- 属性动画
代码实现
-监听软键盘 开启关闭代码
这个方法需要在mainfest里面加一句代码
android:windowSoftInputMode="adjustResize"package wang.com.logininputdemo;import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.RelativeLayout;/*** 一个继承自RelativeLayout的输入法监听布局** Created by zhaowei on 15/7/31.*/
public class InputMethodLayout extends RelativeLayout {private static final String TAG = "InputMethodLayout";/** 初始化状态 **/public static final byte KEYBOARD_STATE_INIT = -1;/** 隐藏状态 **/public static final byte KEYBOARD_STATE_HIDE = -2;/** 打开状态 **/public static final byte KEYBOARD_STATE_SHOW = -3;private boolean isInit; // 是否为初始化状态private boolean hasKeybord; // 标识是否打开了软键盘private int viewHeight; // 布局高度private onKeyboardsChangeListener keyboarddsChangeListener; // 键盘状态监听public InputMethodLayout(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}public InputMethodLayout(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public InputMethodLayout(Context context) {super(context);// TODO Auto-generated constructor stub}/*** 设置软键盘状态监听** @param listener*/public void setOnkeyboarddStateListener(onKeyboardsChangeListener listener) {keyboarddsChangeListener = listener;}/*** 布局状态发生改变时,会触发onLayout*/@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {super.onLayout(changed, l, t, r, b);if (!isInit) {isInit = true;viewHeight = b;keyboardSateChange(KEYBOARD_STATE_INIT);} else {viewHeight = viewHeight < b ? b : viewHeight;}if (isInit && viewHeight > b) {hasKeybord = true;keyboardSateChange(KEYBOARD_STATE_SHOW);}if (isInit && hasKeybord && viewHeight == b) {hasKeybord = false;keyboardSateChange(KEYBOARD_STATE_HIDE);}}/*** 切换软键盘状态** @param state* // 状态*/public void keyboardSateChange(int state) {if (keyboarddsChangeListener != null) {keyboarddsChangeListener.onKeyBoardStateChange(state);}}/*** 软键盘状态切换监听***/public interface onKeyboardsChangeListener {public void onKeyBoardStateChange(int state);}}
还有一个中方法监听 软键盘是否打开
rl.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {//当键盘弹出隐藏的时候会 调用此方法。@Overridepublic void onGlobalLayout() {Rect r = new Rect();//获取当前界面可视部分SecondActivity.this.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);//获取屏幕的高度int screenHeight = SecondActivity.this.getWindow().getDecorView().getRootView().getHeight();//此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数heightDifference = screenHeight - r.bottom;if (heightDifference > screenHeight / 3) {startAnimation();flag = true;} else {backAnimation();flag = false;}}});
这个例子的核心其实就是监听软键盘。其他的没什么了。直接取下载代码看下就明白了。
代码在我的github 欢迎start。fork
https://github.com/wanghao200906/logininputdemo/tree/master
尊重原创:http://blog.csdn.net/wanghao200906/article/details/51113461#t3
完美解决 手机软键盘遮挡问题相关推荐
- uniapp - [完美解决] 手机数字键盘没有小数点,当 input 输入框的 type 属性设置 number 后,手机系统的软键盘无法输入小数点和符号问题(此方案 uniapp 全端全平台适用)
效果图 正常在uniapp项目中,用户想要输入数字或金额时,通常都会将 <input> 的 type 属性设置为 number.但是问题来了,可能在苹果IOS手机.小程序上.个别安卓机上就 ...
- 移动端手机软键盘遮挡输入框问题
页面: <section class="links"><h3 class="title">联系方式</h3><div ...
- 5种方法完美解决android软键盘挡住输入框方法详解
版权声明:本文为CSDN博主「潇潇凤儿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/smileiam/ ...
- android 控件遮盖,Android手机软键盘遮挡布局控件
在Activity中的布局的下方有EditText获取焦点弹出软键盘的时候,如果不作处理,软键盘可能会遮挡输入框或者一些按键,这样的用户体验比较差. 这里整理了几种处理方式,可以使页面整体上移.并且提 ...
- 完美解决android软键盘挡住输入框方法,还不顶标题栏
非透明状态栏下使用adjustResize和adjustPan,或是透明状态栏下使用fitsSystemWindows=true属性 在AndroidManifest.xml对应的Activity里添 ...
- Android 模仿QQ登录界面解决软键盘遮挡问题
Android 软件盘弹出可能会遮挡住界面上的某些控件.当 windowSoftInputMode 为 adjustPan 时,一般不会挡住 EditText,但是假如 EditText 下面是一个登 ...
- js手机键盘遮挡_iphone手机微信页面软键盘遮挡input输入框解决方法
现象描述:iphone手机微信页面,用position: fixed;定位的input或textarea输入框,在获取输入焦点时,会被弹出的输入法软键盘遮挡,导致用户无法看到输入框,效果如图: 简化测 ...
- js手机键盘遮挡_完美解决手机网页中输入框被输入法遮挡的问题
之前要做一个弹出对话框,填写信息,发现在手机上看的时候,较后的输入框在填写信息时,输入框被输入法遮挡,只能盲填. 前提 1.弹出的对话框用display:fixed定位的 2.对话框大小固定 解决办法 ...
- android自定义键盘遮挡,Android软键盘遮挡的四种完美解决方案
一.问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时 ...
最新文章
- 如何删除Struts2动作的后缀扩展名
- leetcode - 967. 连续差相同的数字(集合、递归、动态规划)
- SCI科技论文写作、投稿与发表(一)
- mysql查看现在使用的引擎_如何查看MySQL的当前存储引擎?
- image.merge图像有什么变化_图像特征工程:HOG特征描述子介绍
- DL_C1_week_2_2(Logistic Regression)
- 整数与IP地址间的转换
- 猪猪IDS装起来——Snort安装指南
- 自然语言处理(3)——形式语言与自动机
- Creator 3.0中摄像机调整技巧: 1.旋转:Cmd+右键 移动:空格+右键 放缩:滚轮
- spring事务REQUIRED REQUIRES_NEW区别
- vue实用echart饼图legend显示百分比
- 三位数除以两位数竖式计算没有余数_三位数除两位数计算题-云簿杜同学
- 完美解决Pycharm报错[WinError 193] %1 不是有效的 Win32 应用程序
- 美团、飞猪基础架构组实习经历分享
- http://www.bubuko.com/infodetail-2274185.html
- Android 11.0 进入recovery模式(等待用户选择recovery模式界面)进入自动恢复出厂设置模式
- rsa/ecb/pkcs1padding php,PHPJAVA RSA/ECB/PKCS1Padding 加密解密
- 如何解决windows系统重装之后一直下载windows10易升
- java 熔断器模式_微服务架构熔断器机制的概念以及常用组件类型