Android 软键盘出现不适应的解决办法总结

前言:
很多写登录界面的开发者都会遇到一个问题:那就是在登录界面时,当你点击输入框时,下边的按钮有时会被输入框挡住,这个不利于用户的体验,所以很多人希望软键盘弹出时,也能把按钮挤上去。很多开发者想要监听键盘的状态,这无疑是一个很麻烦的做法。
我们可以在AndroidManifest.xml的Activity设置属性:Android:windowSoftInputMode = "adjustResize" ,软键盘弹出时,要对主窗口布局重新进行布局,并调用onSizeChanged方法,切记一点当我们设置为“adjustResize”时,我们的界面不要设置为全屏模式,否则设置了这个属性也不会有什么效果。而当我们设置android: windowSoftInputMode = "adjustPan"时,主窗口就不会调用onSizeChanged方法,界面的一部分就会被软键盘覆盖住,就不会被挤到软键盘之上了。
我们通过一段代码来测试一下,当我们设置了该属性后,弹出输入法时,系统做了什么:
重写Layout布局:
public class ResizeLayout extends LinearLayout{
private static int count = 0;
public ResizeLayout(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("onSizeChanged " + count++, "=>onResize called! w="+w + ",h="+h+",oldw="+oldw+",oldh="+oldh);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
Log.e("onLayout " + count++, "=>OnLayout called! l=" + l + ", t=" + t + ",r=" + r + ",b="+b);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.e("onMeasure " + count++, "=>onMeasure called! widthMeasureSpec=" + widthMeasureSpec + ", heightMeasureSpec=" + heightMeasureSpec);
}
我们的布局设置为:
<com.winuxxan.inputMethodTest.ResizeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root_layout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" /> <LinearLayout android:id="@+id/bottom_layout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="bottom">s <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:background="#77777777" /> </LinearLayout> </com.winuxxan.inputMethodTest.ResizeLayout>
AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode = "adjustResize"
运行程序,点击文本框,查看调试信息:
E/onMeasure 6(7960): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec = 1073742025 E/onMeasure 7(7960): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec = 1073742025 E/onSizeChanged 8(7960): =>onSizeChanged called! w=320,h=201,oldw=320,oldh=377 E/onLayout 9(7960): =>OnLayout called! l=0, t=0,r=320,b=201
从调试结果我们可以看出,当我们点击文本框后,根布局调用了onMeasure,onSizeChanged和onLayout。
windowSoftInputMode的值如果设置为adjustPan,那么该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。
上面的例子中,我们将AndroidManifest.xml的属性进行更改:android: windowSoftInputMode = "adjustPan"
重新运行,并点击文本框,查看调试信息:
E/onMeasure 6(8378): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec=1073742200 E/onMeasure 7(8378): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec=1073742201 E/onLayout 8(8378): =>OnLayout called! l=0, t=0,r=320,b=377
我们看到:系统也重新进行了measrue和layout,但是我们发现,layout过程中onSizeChanged并没有调用,这说明输入法弹出前后并没有改变原有布局的大小。
当然还有其他属性可以设置:
"stateUnspecified"
软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。
这个是为了软件盘行为默认的设置。
"stateUnchanged"
软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。
"stateHidden"
当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。
"stateAlwaysHidden"
软键盘总是被隐藏的,当该Activity主窗口获取焦点时。
"stateVisible"
软键盘是可见的,当那个是正常合适的时(当用户导航到Activity主窗口时)。
"stateAlwaysVisible"
当用户选择这个Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。
"adjustUnspecified"
它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。
"adjustResize"
该Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间
"adjustPan"
该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# 软键盘弹不适终极解决方案
# 软键盘出错解决办法
# 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
# Android中监听软键盘显示状态实现代码
# Android 显示和隐藏软键盘的方法(手动)
# Android软键盘弹出时的界面控制方法
# Android WebView无法弹出软键盘的原因及解决办法
# Android屏蔽EditText软键盘的方法
# Android软键盘遮挡的四种完美解决方案
# Android开发软键盘遮挡登陆按钮的完美解决方案
# Android软键盘挡住输入框的终极解决方案
# 弹出
# 设置为
# 当我们
# 不被
# 文本框
# 到它
# 到该
# 输入框
# 而不是
# 是一个
# 他们的
# 就会
# 也不
# 是在
# 那就
# 上了
# 出现在
# 很多人
# 当你
# 依赖于
相关文章:
宁波免费建站如何选择可靠模板与平台?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
零服务器AI建站解决方案:快速部署与云端平台低成本实践
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
如何在阿里云通过域名搭建网站?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
网站制作公司,橙子建站是合法的吗?
建站主机选购指南与交易推荐:核心配置解析
jQuery 常见小例汇总
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
建站之星如何实现五合一智能建站与营销推广?
建站之星收费标准详解:套餐费用及年费价格表一览
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
山东网站制作公司有哪些,山东大源集团官网?
高性价比服务器租赁——企业级配置与24小时运维服务
建站之星上传入口如何快速找到?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
免费网站制作appp,免费制作app哪个平台好?
网站app免费制作软件,能免费看各大网站视频的手机app?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
如何构建满足综合性能需求的优质建站方案?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
代刷网站制作软件,别人代刷火车票靠谱吗?
如何获取免费开源的自助建站系统源码?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
,有什么在线背英语单词效率比较高的网站?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
如何快速生成ASP一键建站模板并优化安全性?
建站主机选择指南:服务器配置与SEO优化实战技巧
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
如何用景安虚拟主机手机版绑定域名建站?
如何通过虚拟主机快速完成网站搭建?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
韩国服务器如何优化跨境访问实现高效连接?
建站之星2.7模板:企业网站建设与h5定制设计专题
如何在Golang中指定模块版本_使用go.mod控制版本号
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
如何选购建站域名与空间?自助平台全解析
如何用花生壳三步快速搭建专属网站?
C#如何使用XPathNavigator高效查询XML
如何挑选优质建站一级代理提升网站排名?
高端建站三要素:定制模板、企业官网与响应式设计优化
香港服务器部署网站为何提示未备案?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
长沙做网站要多少钱,长沙国安网络怎么样?
建站之星如何助力网站排名飙升?揭秘高效技巧
如何在橙子建站中快速调整背景颜色?
*请认真填写需求信息,我们会在24小时内与您取得联系。