题记:
我们日常Android业务开发中,一定离不开EditText输入框的相关业务需求,但是基于源生的软键盘相关存在很多坑,本文我结合最近的一个需求来分析个别功能实现以及解决一些坑点。
好了,废话不多说,我们进入正题
1:动态改变EditText的高度
需求:当点击聊天室底部输入框后,弹起软键盘,输入框会被顶起居于软键盘上层,并且输入框的高度改变为原来的3倍。
效果如下:
上面为了区分EditText的的高度变化,我们设置了不同背景颜色来凸显变化。
方法一:
我们可以直接通过 setHeight 来改变其高度
不过这种简单暴力的方法在某些特殊的场景以及业务下,会失效,具体原因要根据不同的情况来分析 这里我们不具体分析。
方法二:
我们通过 设置EditText 的LayoutParams 来改变其高度,这种方法安全靠谱,当然我们在设置的时候要注意
子控件在获取LayoutParams一定要和当前父控件的容器类型保持一致,因为一般我们的EditText都会放在一个父布局,
好了我们直接代码:
通过以上设置我们就可以完成动态改变EditText高度。但是这样我突然发现了一个天坑,当软键盘弹起来的时候,突然发现输入框只显示了一半???what???什么鬼,不慌,这是因为当我们Layout被顶上去的时候 默认的布局会进行压缩,目的是为了给软键盘腾个地方现实,所以造成这样的bug
2:输入框显示不全
那我们就这样设置: 在Manifest中对应的Activity里加上
android:windowSoftInputMode="stateVisible|adjustResize"
android:screenOrientation="portrait"
然后我们在当前的Activity onCreate中设置:
Window win = getWindow();
win.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
这两个设置要同时存在否在无法解决问题
3:设置文本显示的位置
基于需求1,当我们改变EditText的高度后,发现文本输入是居于中间显示的,为了给用户更好的体验我们应该把输入框的起始位置变为左上角
设置如下:
android:gravity="top|left"
好了今天先写到这里。。。明天继续更新此文章,也希望遇到各种EditText相关问题的小伙伴留言,我们一起探讨解决,嘻嘻~
LayoutParams