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

  首先来分析下我们常见的遮挡问题有哪些(本次所说遮挡问题的控件都是在软键盘弹出的范围内)。1.点击输入框弹出软键盘时,遮挡本输入框,2.点击输入框,输入框跟随软键盘自动上移时其他不该移动的内容也跟随上移,比如ActionBar。3.类似于登陆界面的2个以上的输入框,点击第一个进行输入的时候,它之下的控件不会跟随上移。

  目前就这几个常见的类型,后续有其他特殊案例可留言再进行补充解决。下面我们逐步解决这三个问题,第一个,这个不用管,因为系统默认点击输入框进行输入的时候会把当前输入框自动上移,这时候就会引起第二个问题,当他上移的时候,会把它之上的内容一起上移效果如下:

        

这个时候我们只需要在其中需要上移的内容嵌套在ScrollView中就行了,比如我们上图的内容将如下红线框中的内容嵌套到ScrollView中就没问题了:

亲测有效,如果你的没有效果,那么请尝试一下设置ScrollView的相关属性。注意如果要设置android:windowSoftInputMode请不要使用adjustPan值,具体含义在本文最后将作出说明。

第三个问题,当我们点击输入用户名的输入框时,这时候我们其实也希望软键盘同时将用户名输入框和密码输入框同时顶到上面去,系统默认是只满足将获取输入焦点的用户名输入框顶上去,所以我们要进行相关的处理:基本思路如下,我们通过控制ScrollView的滑动位置来控制显示区域,并且我们要知道当属性android:windowSoftInputMode设置成adjustResize的时候,软键盘弹出时Activity会重绘并且他的Activity布局的底部就是软键盘的顶部,这个可以自行测试,接下来我们就知道,我们将需要弹上去的整体都放在ScrollView中,当软键盘弹出时,我们设置ScrollView滑动到底部位置,这样就能达到效果了,代码如下:

<com.lvyerose.softtest.KeyboardLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="match_parent"> <ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"> <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:gravity="center"> <ImageView
android:id="@+id/top_img"
android:layout_width="match_parent"
android:layout_height="160dp"
android:layout_marginTop="32dp"
android:src="@drawable/bg" /> <EditText
android:id="@+id/id_input_name"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:layout_below="@+id/top_img"
android:layout_centerHorizontal="true"
android:layout_marginTop="32dp"
android:hint="请输入用户名" /> <EditText
android:id="@+id/id_input_password"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:layout_below="@+id/id_input_name"
android:layout_centerHorizontal="true"
android:hint="请输入密码"
android:inputType="number" /> </RelativeLayout>
</ScrollView> </com.lvyerose.softtest.KeyboardLayout>

其中的KeyboardLayout自定义布局不用管,它是继承RelativeLayout并添加了监听软键盘弹出和隐藏的,只是这里用不上,你们测试的时候可以直接使用RelativeLayout即可。在Activity中对第一个输入框进行监听:

editTextName.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
changeScrollView();
return false;
}
});

 

用于滑动控制ScrollView的方法如下,注意使用延迟回调是因为第一时间软键盘弹出需要短暂的时间,这时候去设置ScrollView时布局还没有完全重绘完成,也就不会有滑动效果,只有延迟之后就是估量布局稳定了的时候再进行ScrollView上滑才会有效果,这个地方使用过ScrollView的控制滑动的童鞋就应该遇到过!

    /**
* 100毫秒之后使ScrollView指向底部
*/
private void changeScrollView(){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
scrollView.scrollTo(0, scrollView.getHeight());
}
}, 100);
}

通过上面的设置就可以完成如登陆界面一样的效果,让你需要的整体一起滑动到软键盘的上面而不被遮挡。

之前提到了关于软键盘设置的属性android:windowSoftInputMode,下面提供俩个博客地址,有需要进一步了解的同学可以去看看:

  1. android:windowSoftInputMode 属性使用
  2. android:windowSoftInputMode 属性详解

如果还有未知的情况需要的可以留言!谢谢观赏~~~

Android软键盘遮挡布局的那些事的更多相关文章

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

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

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

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

  3. 关于Android软键盘把布局顶上去的问题(一)

    最近接触到了一个登陆页面,布局最上面显示的是一个波纹的view,中间显示账号和密码的EditText,紧接着还有一个Button: 希望:点击EditText时,软键盘不能把波纹的view顶出去,也不 ...

  4. 关于Android软键盘把布局顶上去的问题

    首先说下我的需求:布局最上面是一个bar,有左上角返回按钮和标题,bar下面是一个ScrollView,里面有各种TextView和EditText, 点击下面的EditText时,不希望软键盘把ba ...

  5. Android软键盘弹出,覆盖h5页面输入框问题

    之前我们在使用vue进行 h5 表单录入的过程中,遇到了Android软键盘弹出,覆盖 h5页面 输入框 问题,在此进行回顾并分享给大家: 系统:Android 条件:当输入框在可视区底部或者偏下的位 ...

  6. Android软键盘的隐藏显示、事件监听的代码

    把开发过程中重要的一些内容片段做个珍藏,如下资料是关于Android软键盘的隐藏显示.事件监听的内容,应该是对小伙伴们有所用途. public class ResizeLayout extends L ...

  7. Android 软键盘弹出,界面整体上移

    在做搜索功能的时候,点击搜索框,搜索框获取焦点,键盘弹出:现在问题出来了,android软键盘弹出的时候,android整个界面上移,布局被挤压,很难看:要解决这个问题,我们需要用到 windowSo ...

  8. Android 软键盘监听事件

    Android软键盘的隐藏显示研究 Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入.     那么,弹出软键盘后必然会造成原有布局高度的减少 ...

  9. 完美解决android软键盘监听

    最近在做应用性能调优,发现在一个包含有输入框的Activity中,当软键盘弹出的时候,如果直接finish掉此Activity,那么在返回到上一个Activity时,界面的渲染会由于软键盘没有及时的收 ...

随机推荐

  1. 深度神经网络(DNN)损失函数和激活函数的选择

    在深度神经网络(DNN)反向传播算法(BP)中,我们对DNN的前向反向传播算法的使用做了总结.里面使用的损失函数是均方差,而激活函数是Sigmoid.实际上DNN可以使用的损失函数和激活函数不少.这些 ...

  2. Angular企业级开发(8)-控制器的作用域

    scope概念 scope(作用域)是视图和控制器之间的桥梁,scope本身是一个对象,有方法和属性.scope可以应用在视图和控制器上. scope简单示例 <!DOCTYPE html> ...

  3. php的empty()和isset()用法

    共同点: 1.都可以判定一个变量是否为空: 2.都返回boolean类型,即true或false. 区别: 1.isset()用来检测变量是否设置,只能用于变量,因为传递任何其它参数都将造成解析错误. ...

  4. Redis安装以及基本数据类型

    安装 1.阿里云CentOS 1.进入到centos系统,输入wget http://download.redis.io/releases/redis-3.2.8.tar.gz ,下载好目前最新版的R ...

  5. Smarty模板的基础

    对前后端进行分离 如果要用的话,要从网上把smarty文件下载下来,才能用 smarty的核心是一个类 建一个php文件,写一个类文件 <?php class smarty { public $ ...

  6. 不需要密码的windows计划任务设置

    使用windows计划任务定时做些事情,确实非常方便,但创建任务时老是需要设置密码,否则在执行任务时会报80070005的系统错误导致任务无法执行. 有时windows没设密码或当账户修改密码就必须修 ...

  7. TokuDB性能测试报告

    一 .背景介绍 近年来,TokuDB作为MySQL的大数据(Big Data)存储引擎受到人们的普遍关注.其架构的核心基于一种新的叫做分形树(Fractal Trees)的索引数据结构,该结构是缓存无 ...

  8. .NET Core 1.1日期解析无APi、SQL Server数据转换JSON

    前言 在批量导入Excel中的数据时发现出生日期为整数也就是为天数,结果倒腾了翻,这是其一,其二是数据库中的某一列存的是JSON数据,但是场景是为了作为作业来运行,此时不得不将筛选出的数据手动拼接成J ...

  9. JSOI2015 一轮省选 个人题解与小结

    T1: 题目大意:现有一个以1为根节点的树,要求从1开始出发,经过下面的点然后最终要回到根节点.同时除了根节点之外各点均有一个权值(即受益,每个点上的收益只能拿一次,且经过的话必须拿),同时除了根节点 ...

  10. python 接口自动化测试(三)

    1.WriteIni.py import ConfigParser cf = ConfigParser.ConfigParser() cf.add_section("PC_WSDL" ...