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

  首先来分析下我们常见的遮挡问题有哪些(本次所说遮挡问题的控件都是在软键盘弹出的范围内)。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. window7 32位安装Oracle11g

    http://www.cnblogs.com/wangsaiming/p/3573509.html

  2. index_merge引发的死锁排查

    概述 前几天排查了一个死锁问题,最开始百思不得其解,因为发生死锁的两个事务是单语句事务,语句类型相同(where属性列相同,仅值不同),而且语句都走了相同的索引,但最终确实发生了死锁.通过定位排查发现 ...

  3. 了解 : 怎么处理jobbox status drop down list roll back

    that.onStatusEnumChange = function (toStatus) { //设计理念是当completed 和 rejected 的状态下,是无法换状态 if (toStatu ...

  4. Java 集合的简单实现 (ArrayList & LinkedList & Queue & Stack)

    ArrayList 就是数组实现的啦,没什么好说的,如果数组不够了就扩容到原来的1.5倍 实现了迭代器 package com.wenr.collection; import java.io.Seri ...

  5. 《深入理解Java虚拟机》学习笔记之内存回收

    垃圾收集(Garbage Collection,GC)并不是Java语言的半生产物,事实上GC历史远比Java久远,真正使用内存动态分配和垃圾收集技术的语言是诞生于1960年的Lisp语言.经过半个世 ...

  6. x01.Weiqi.13: 鼎力推荐

    鼎力推荐 : 点击后即可观看,小伙子讲的很有深度. 说到深度,自然离不了深度学习.AlphaGo 的横空出世,似乎很有学习的必要. MuGo: 点击下载后,发现是 python,自然免不了一番学习,好 ...

  7. Objective-C日记-之KVC

    KVC(Key-Value-Coding?) 1, 概述 以字符串形式向对象的实例变量或属性(Property)发送或者获得值的方法. 2,用法 a,取值 @property (readwrite,c ...

  8. wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法

    wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法,可用于其他商城或者系统的编程参考 package cn.zzu.edu.wemall.utils ...

  9. Linux系统常用命令总结

    1. 最关键的命令 manecho 2. 目录文件操作命令 ls: 查看目录下的文件信息或文件信息dir:pwd: 打印当前路径cd:改变路径mkdir:创建路径rmdir:删除路径cp:拷贝文件或目 ...

  10. http的几种请求的方式(Get、Post、Put、Head、Delete、Options、Trace和Connect)

    http的这几种请求方式各有各的特点,适用于各自的环境.下面我就说说这些方式的各自特点: 1.Get:它的原理就是通过发送一个请求来取得服务器上的某一资源.获取到的资源是通过一组HTTP头和呈现数据来 ...