EditText底部顶起,动态改变高度,及各种疑难杂症处理

题记:

我们日常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

你可能感兴趣的:(EditText底部顶起,动态改变高度,及各种疑难杂症处理)