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

  首先来分析下我们常见的遮挡问题有哪些(本次所说遮挡问题的控件都是在软键盘弹出的范围内)。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也会遇到过拟合的问题,需要考虑泛化,这里我们就对DNN的正则化方法做一个总结. 1. DNN的L1&L2正则化 想到正则化,我们首先想到的就是L1正则化和L2正 ...

  2. Windows下安装Redis数据库并实现C#访问

    1.Redis在Windows下的安装 目前Redis官方并不支持Redis的Windows版本,需要去GitHub下载. GitHub上的Redis分两种,一种是以命令行形式安装的,一种是以Wind ...

  3. 《Django By Example》第七章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag注:咳咳,第七章终于来了.其 ...

  4. LSTM模型与前向反向传播算法

    在循环神经网络(RNN)模型与前向反向传播算法中,我们总结了对RNN模型做了总结.由于RNN也有梯度消失的问题,因此很难处理长序列的数据,大牛们对RNN做了改进,得到了RNN的特例LSTM(Long ...

  5. homebrew常用命令

    安装 ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/Go/install)" 搜索 brew sea ...

  6. 《新手养成记》--第一篇 iOS手机号正则判断和获取验证码

    今天是开通一个新博客开启新的一年,同时也是对自己的过去做一个告别.介绍一下博主自己,资深iOS屌丝男,今天写这个博客就是刻意拉低逼格的,前两年写的博客为了装那什么,故意写的高大上,其实呵呵哒...年假 ...

  7. 类似于qq空间类型的评论和回复

    最近学习thinkphp,做了一个博客系统,其中感觉实现一个类似于qq空间的评论和回复功能比较复杂,所以把这次的经历记录下来,与大家共勉,具体的方法就不说了,在这里分享一下思路. 目标就是这种,关键是 ...

  8. (原创)我对未来的人类的发展,以及AI技术发展的一些思考。

    最近AI非常的火,不仅仅是阿尔法狗的成功,因为它击败了人类最强的大脑,颠覆了人类几千年来的对传统的认识,也让人类意识 到了一个问题:天外有天,人外有AI. 那么AI究竟会对人类的未来造成什么深远的影响 ...

  9. wemall app商城源码Android之支付宝接口公用函数

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之  ...

  10. KoaHub.JS用于Node.js的可移植Unix shell命令程序代码

    shelljs Portable Unix shell commands for Node.js ShellJS - Unix shell commands for Node.js     Shell ...