題記:
我們?nèi)粘ndroid業(yè)務(wù)開發(fā)中,一定離不開EditText輸入框的相關(guān)業(yè)務(wù)需求垦搬,但是基于源生的軟鍵盤相關(guān)存在很多坑呼寸,本文我結(jié)合最近的一個需求來分析個別功能實(shí)現(xiàn)以及解決一些坑點(diǎn)。
好了猴贰,廢話不多說对雪,我們進(jìn)入正題
1:動態(tài)改變EditText的高度
需求:當(dāng)點(diǎn)擊聊天室底部輸入框后,彈起軟鍵盤米绕,輸入框會被頂起居于軟鍵盤上層慌植,并且輸入框的高度改變?yōu)樵瓉淼?倍。
效果如下:
上面為了區(qū)分EditText的的高度變化义郑,我們設(shè)置了不同背景顏色來凸顯變化蝶柿。
方法一:
我們可以直接通過 setHeight 來改變其高度??
不過這種簡單暴力的方法在某些特殊的場景以及業(yè)務(wù)下,會失效非驮,具體原因要根據(jù)不同的情況來分析 這里我們不具體分析交汤。
方法二:
我們通過 設(shè)置EditText 的LayoutParams 來改變其高度,這種方法安全靠譜劫笙,當(dāng)然我們在設(shè)置的時候要注意
子控件在獲取LayoutParams一定要和當(dāng)前父控件的容器類型保持一致芙扎,因?yàn)橐话阄覀兊腅ditText都會放在一個父布局,
好了我們直接代碼:
通過以上設(shè)置我們就可以完成動態(tài)改變EditText高度填大。但是這樣我突然發(fā)現(xiàn)了一個天坑戒洼,當(dāng)軟鍵盤彈起來的時候,突然發(fā)現(xiàn)輸入框只顯示了一半允华?圈浇??what靴寂?磷蜀??什么鬼百炬,不慌褐隆,這是因?yàn)楫?dāng)我們Layout被頂上去的時候 默認(rèn)的布局會進(jìn)行壓縮,目的是為了給軟鍵盤騰個地方現(xiàn)實(shí)剖踊,所以造成這樣的bug
2:輸入框顯示不全
那我們就這樣設(shè)置: 在Manifest中對應(yīng)的Activity里加上
android:windowSoftInputMode="stateVisible|adjustResize"?
android:screenOrientation="portrait"
然后我們在當(dāng)前的Activity onCreate中設(shè)置:
Window win = getWindow();
win.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
這兩個設(shè)置要同時存在否在無法解決問題
3:設(shè)置文本顯示的位置
?基于需求1庶弃,當(dāng)我們改變EditText的高度后衫贬,發(fā)現(xiàn)文本輸入是居于中間顯示的,為了給用戶更好的體驗(yàn)我們應(yīng)該把輸入框的起始位置變?yōu)樽笊辖?/p>
設(shè)置如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?android:gravity="top|left"
好了今天先寫到這里歇攻。固惯。。明天繼續(xù)更新此文章掉伏,也希望遇到各種EditText相關(guān)問題的小伙伴留言,我們一起探討解決澳窑,嘻嘻~
LayoutParams