Android 键盘相关常见问题有:
-
限制输入框内字数,超过字数不让输入,并且提示
-
点击外部区域键盘自动收起
-
如何获取键盘高度
下面将对上述问题各个击破。
1.限制输入框内字数,超过字数不让输入,并且提示
etReply.setFilters(new InputFilter[]{new InputFilter(){
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (source.length() + dest.length() > COMMENT_MAX_NUM) {
Crouton.makeText(AppUtils.getString(R.string.infodetail_comment_limit),Style.ALERT).show();
}
return null;
}
}, new InputFilter.LengthFilter(COMMENT_MAX_NUM)});
2. 点击外部区域键盘自动收起
如果当前页面是Activity那么可以直接重写dispatchTouchEvent
方法。在ACTION_DOWN
事件时,判断点击的坐标是否在输入框坐标的上面,如果是那么调用隐藏键盘的方法。
如果当前页面是Fragment,那么Fragment中增加一个dispatchTouchEvent
方法,内部逻辑同上,在Fragment所依赖的Activity代码中将dispatchTouchEvent
事件透传给Fragment的dispatchTouchEvent
,如果键盘需要隐藏,Fragment的dispatchTouchEvent
方法需要返回true
,表示消费本次所有触摸事件,不再继续传递。
3. 如何获取键盘高度
首先需要知道一点,键盘高度不是固定的。用户使用不同的输入法,高度可能不一样;甚至有些输入法,可以直接调节输入法面板的高度。
3.1 有没有系统的api可以供我们获取键盘高度?
没有。
3.2 有什么方法可以间接获取键盘高度?
系统给我们提供了一个页面布局变化的监听器OnGlobalLayoutListener
,这个监听器可以通知我们布局发生改变,我们可以在此时获取自己的高度,再通过屏幕宽度和状态栏高度等间接计算出键盘的高度。
- 那么就有一个问题,
OnGlobalLayoutListener
接收到变化动作时,一定是键盘弹出或消失么?
不一定。
那为什么使用OnGlobalLayoutListener
可以监听键盘的状态?
我们知道每个view的宽高变化都会导致
OnGlobalLayoutListener
的触发,但是对当前Activity的Window对象中的DecorView进行监听时,一般来说,DecorView的尺寸不会发生变化,发生变化的主要原因就是键盘的收起和展开,这时候加上简单的判断(变化超过某个阈值)就可以获取键盘的高度,以及是否弹起。
- 有没有使用
OnGlobalLayoutListener
监听键盘失效的情景?
在Android7.0上,我们可以使用多任务键开启分屏/多窗口模式,当我们开启分屏之后,调整分屏的分界线时,都会触发
DecorView
的OnGlobalLayoutListener
,但是此时键盘并未触发任何动作;而且,当我们点击某个输入框之后,键盘在分屏模式下会变成悬浮模式,不会挤压Activity的控件,所以当键盘弹出或收起时,OnGlobalLayoutListener
不会接收到任何事件。这就导致了OnGlobalLayoutListener
完全失效。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
文末
架构师不是天生的,是在项目中磨练起来的,所以,我们学了技术就需要结合项目进行实战训练,那么在Android里面最常用的架构无外乎 MVC,MVP,MVVM,但是这些思想如果和模块化,层次化,组件化混和在一起,那就不是一件那么简单的事了,我们需要一个真正身经百战的架构师才能讲解透彻其中蕴含的深理。
一线互联网Android面试题总结含详解(初级到高级专题)
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
详解(初级到高级专题)**
[外链图片转存中…(img-KeCkhFqp-1712197330419)]