android软键盘弹出引起的各种不适终极解决方案
以下描述如何解决ListView高度小于0时出现的UI问题。
创建RelativeLayout的子类TxrjRelativeLayout
public class TxrjRelativeLayout extends RelativeLayout {
private int count = 0;
public TxrjRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
Log.e("txrjsms " + count++, "=>onSizeChanged called! w=" + w
+ ",h=" + h + ",oldw=" + oldw + ",oldh=" + oldh);
}
}
使用TxrjRelativeLayout 提供sms_message_list.xml文件中的根节点RelativeLayout。
运行程序查看日志:
07-20 12:56:54.774: E/txrjsms 0(23195): =>TxrjRelativeLayout.onSizeChanged called! w=480,h=762,oldw=0,oldh=0
07-20 12:56:54.784: E/txrjsms 0(23195): =>TxrjListView.onSizeChanged called! w=480,h=605,oldw=0,oldh=0
07-20 12:56:55.024: E/txrjsms 1(23195): =>TxrjListView.onSizeChanged called! w=480,h=373,oldw=480,oldh=605
07-20 12:57:08.377: E/txrjsms 1(23195): =>TxrjRelativeLayout.onSizeChanged called! w=480,h=353,oldw=480,oldh=762 // 762-353=409
07-20 12:57:08.377: E/txrjsms 2(23195): =>TxrjListView.onSizeChanged called! w=480,h=-36,oldw=480,oldh=373 // 373-(-36)=409
07-20 12:57:48.396: E/txrjsms 3(23195): =>TxrjListView.onSizeChanged called! w=480,h=-37,oldw=480,oldh=-36
07-20 12:57:57.164: E/txrjsms 4(23195): =>TxrjListView.onSizeChanged called! w=480,h=-9,oldw=480,oldh=-37
07-20 12:58:00.338: E/txrjsms 5(23195): =>TxrjListView.onSizeChanged called! w=480,h=19,oldw=480,oldh=-9
07-20 12:58:06.864: E/txrjsms 6(23195): =>TxrjListView.onSizeChanged called! w=480,h=47,oldw=480,oldh=19
07-20 12:58:07.745: E/txrjsms 7(23195): =>TxrjListView.onSizeChanged called! w=480,h=75,oldw=480,oldh=47
07-20 12:58:08.776: E/txrjsms 8(23195): =>TxrjListView.onSizeChanged called! w=480,h=103,oldw=480,oldh=75
07-20 12:58:09.647: E/txrjsms 9(23195): =>TxrjListView.onSizeChanged called! w=480,h=131,oldw=480,oldh=103
07-20 12:58:10.477: E/txrjsms 10(23195): =>TxrjListView.onSizeChanged called! w=480,h=159,oldw=480,oldh=131
07-20 12:58:11.378: E/txrjsms 11(23195): =>TxrjListView.onSizeChanged called! w=480,h=187,oldw=480,oldh=159
07-20 12:58:12.299: E/txrjsms 12(23195): =>TxrjListView.onSizeChanged called! w=480,h=196,oldw=480,oldh=187
07-20 12:58:15.813: E/txrjsms 2(23195): =>TxrjRelativeLayout.onSizeChanged called! w=480,h=419,oldw=480,oldh=353 // 419-353=66
07-20 12:58:15.813: E/txrjsms 13(23195): =>TxrjListView.onSizeChanged called! w=480,h=262,oldw=480,oldh=196
07-20 12:58:15.913: E/txrjsms 3(23195): =>TxrjRelativeLayout.onSizeChanged called! w=480,h=762,oldw=480,oldh=419 // 762-419=343
07-20 12:58:15.923: E/txrjsms 14(23195): =>TxrjListView.onSizeChanged called! w=480,h=605,oldw=480,oldh=262
通过计算,可以得出软键盘的高度是409,其中候选区高度是66,键盘区高度是343。
实现TxrjListView扩展ListView,在onSizeChanged()方法中根据当前高度判断是否将ListView设定为不可见。
如果高度小于等于0,那么将ListView设定为不可见,然后就不会出现文章adjustResize和adjustPan的比较中提到的UI重叠BUG。
public class TxrjListView extends ListView {
public int count = 0;
public TxrjListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
Log.e("txrjsms " + count++, "=>TxrjListView.onSizeChanged called! w=" + w
+ ",h=" + h + ",oldw=" + oldw + ",oldh=" + oldh);
setVisibility(h <= 0 ? View.INVISIBLE : View.VISIBLE); // 高度小于等于0不可见,高度大于0可见。
}
}
android软键盘弹出引起的各种不适终极解决方案的更多相关文章
- Android软键盘弹出,覆盖h5页面输入框问题
之前我们在使用vue进行 h5 表单录入的过程中,遇到了Android软键盘弹出,覆盖 h5页面 输入框 问题,在此进行回顾并分享给大家: 系统:Android 条件:当输入框在可视区底部或者偏下的位 ...
- Android 软键盘弹出,界面整体上移
在做搜索功能的时候,点击搜索框,搜索框获取焦点,键盘弹出:现在问题出来了,android软键盘弹出的时候,android整个界面上移,布局被挤压,很难看:要解决这个问题,我们需要用到 windowSo ...
- Android软键盘弹出时布局问题
最近项目需要做一个类似聊天室的模块,基于Socket实现的,这部分稍后一段时间再做总结,功能上的相关点都实现了小例子也做出来了,最后发现一个比较腻歪的问题就是软键盘弹出时总是会把标题“挤出”屏幕,(无 ...
- Android 软键盘弹出时把原来布局顶上去的解决方法
键盘弹出时,会将布局底部的导航条顶上去. 解决办法: 在mainfest.xml中,在和导航栏相关的activity中加: <activity android:name=& ...
- Android软键盘弹出时把布局顶上去的解决方法
原文: 解决Andriod软键盘出现把原来的布局给顶上去的方法(转) 链接:http://blog.sina.com.cn/s/blog_9564cb6e0101g2eb.html 决方法,在main ...
- Android 判断软键盘弹出并隐藏的简单完美解决方案
最近项目中有一个编辑框,下面是个ListView.在触发编辑框弹出软键盘后,ListView还能滑动,并且ListView的item还能响应单击.这样的体验效果很不好.于是便想在滑动或单击item时判 ...
- Android 软键盘弹出时把布局顶上去,控件乱套解决方法
解决办法:方法一:在你的activity中的oncreate中setContentView之前写上这个代码getWindow().setSoftInputMode(WindowManager.Layo ...
- android软键盘弹出隐藏的监听
通过网上搜索关于软键盘的隐藏弹出的监听,有几种方式,其中最有效的方式是在View的Onlayout()里面做文章 具体代码: 将布局视图自定义,重写onlayout()方法,然后在主Activity里 ...
- edittext禁止android软键盘弹出
1. EditText ed=(EditText) findViewById(R.id.test); ed.clearFocus(); 2. 在AndroidMainfest.xml中选择哪个acti ...
随机推荐
- Asp.net WebAPi gzip压缩和json格式化
现在webapi越来越流行了,很多时候它都用来做接口返回json格式的数据,webapi原本是根据客户端的类型动态序列化为json和xml的,但实际很多时候我们都是序列化为json的,所以webapi ...
- 怎样用纯HTML和CSS更改默认的上传文件按钮样式
如果你曾经试过,你就会知道,用纯CSS样式加HTML实现统一的上传文件按钮可能会很麻烦.看看下面的不同浏览器的截图.很明显的,他们长得很不一样. 我们的目标是创造一个简洁,用纯CSS实现的,在所有浏览 ...
- 关于UITableView的黑线条
这里採用分组形式.底色可用图片覆盖,设置为cell(是一个view)的子视图,并把cell'的颜色设置为底色 当UITableView的cell没有满屏显示时,就会出现黑线条.我们仅仅需在初始化时,加 ...
- linux命令学习——tar
tar命令用来处理压缩,压缩和解压.在linux上经常遇到tar命令,总结如下: tar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独 ...
- Centos配置为驱动程序开发环境
安装完centos后,写了一个驱动测试程序Hello.编译过程出现如下错误: make: *** /lib/modules/2.6.32-220.4.1.el6.i686/build: No such ...
- tail -f 然后grep,处理缓存的问题
学习了:http://www.quwenqing.com/read-134.html 对日志记录做多次grep过滤输出,格式如下: tail -f log | grep xxx | grep yyy ...
- 小议IE10下的DrawToBitmap方法
在完成博文“PS网页设计教程XXIV——从头设计一个漂亮的网站”后. 出于习惯,打开之前“利用Webbrowser类实现超长网页的截屏的实现(解决报错不能截取的难题)”中的代码的程序,截取博文作为资料 ...
- 【转】 Java多态特性:重载和覆写的比较
Java重载: 在同一个类中 方法具有相同的名字,相同或不同的返回值,但参数不同的多个方法(参数个数或参数类型) public class MethoDemo{ public static void ...
- Windows上Boost的编译步骤
一.FQ下载Boost最新版本 官网:http://www.boost.org/ 假设解压到:D:\Applicaton\DevTools\boost\boost_1_65_1 二.使用VS编译器 c ...
- Hessian 原理分析
Hessian 原理分析 一.远程通讯协议的基本原理 网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http . tcp . u ...