Android 输入法挤压屏幕解决方案
問題發(fā)生
Android 輸入法問題真是太蛋疼了, 我有這樣一個需求, 要在圖片上加字, 上圖看效果:
然后我要雙擊編輯的時候需要一個編輯框, 但是界面之前是沒有任何編輯框的, 我的想法是在底部生成一個編輯框,然后編輯的時候讓這個編輯框獲取焦點, 彈出軟鍵盤,然后這一步彈出軟鍵盤可是進坑了, 變成了這樣的效果, 積壓了屏幕:
想到的解決方案一
查詢相關(guān)知識可知為Activity設(shè)置 windowSoftInputMode, 有這樣一些屬性:
“stateUnspecified” 軟鍵盤的狀態(tài)(是否它是隱藏或可見)沒有被指定。系統(tǒng)將選擇一個合適的狀態(tài)或依賴于主題的設(shè)置。這個是為了軟件盤行為默認(rèn)的設(shè)置。
“stateUnchanged” 軟鍵盤被保持無論它上次是什么狀態(tài),是否可見或隱藏,當(dāng)主窗口出現(xiàn)在前面時。
“stateHidden” 當(dāng)用戶選擇該Activity時,軟鍵盤被隱藏——也就是,當(dāng)用戶確定導(dǎo)航到該Activity時,而不是返回到它由于離開另一個Activity。
“stateAlwaysHidden” 軟鍵盤總是被隱藏的,當(dāng)該Activity主窗口獲取焦點時。
“stateVisible” 軟鍵盤是可見的,當(dāng)那個是正常合適的時(當(dāng)用戶導(dǎo)航到Activity主窗口時)。
“stateAlwaysVisible” 當(dāng)用戶選擇這個Activity時,軟鍵盤是可見的——也就是,也就是,當(dāng)用戶確定導(dǎo)航到該Activity時,而不是返回到它由于離開另一個Activity。
“adjustUnspecified” 它不被指定是否該Activity主窗口調(diào)整大小以便留出軟鍵盤的空間,或是否窗口上的內(nèi)容得到屏幕上當(dāng)前的焦點是可見的。系統(tǒng)將自動選擇這些模式中一種主要依賴于是否窗口的內(nèi)容有任何布局視圖能夠滾動他們的內(nèi)容。如果有這樣的一個視圖,這個窗口將調(diào)整大小,這樣的假設(shè)可以使?jié)L動窗口的內(nèi)容在一個較小的區(qū)域中可見的。這個是主窗口默認(rèn)的行為設(shè)置。
“adjustResize” 該Activity主窗口總是被調(diào)整屏幕的大小以便留出軟鍵盤的空間。
“adjustPan” 該Activity主窗口并不調(diào)整屏幕的大小以便留出軟鍵盤的空間。相反,當(dāng)前窗口的內(nèi)容將自動移動以便當(dāng)前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內(nèi)容的部分。這個通常是不期望比調(diào)整大小,因為用戶可能關(guān)閉軟鍵盤以便獲得與被覆蓋內(nèi)容的交互操作。
然而設(shè)置adjustPan不調(diào)整屏幕大小, 此時編輯框就不會和軟鍵盤一起彈上來, 而是留在底部, 可見這些屬性并不能解決什么!
方案一失敗。
想到的解決方案二
此時我想如果我不把編輯框放在底部而是放在軟鍵盤彈出位置的上面可好, 如果放在上面那我要知道軟鍵盤的高度, 這樣才能把空間設(shè)置到相應(yīng)的位置, 帶著這個問題查了些資料,解決思路都是先設(shè)置adjustResize讓界面調(diào)整大小來適應(yīng)軟鍵盤的彈出, 然后根據(jù)界面的根部view通過輸入法彈出和收回屏幕上剩余空間的變化來得出軟鍵盤高度, 獲取軟鍵盤高度相關(guān)網(wǎng)站:
http://stackoverflow.com/questions/7417123/android-how-to-adjust-layout-in-full-screen-mode-when-softkeyboard-is-visible/19494006#19494006
https://www.diycode.cc/topics/383
親測之后得出的值也是有變化的,再者說我不能讓軟鍵盤彈出來了我才去計算它的高度, 這也是不合理的。
我能做到的解決方案
現(xiàn)在的問題就是軟鍵盤彈出并且擠壓了頁面的相關(guān)控件, 我目前的解決方式有倆個:
第一是頁面上在底部的控件都設(shè)置上margin, 此方法和保證它不隨著軟鍵盤一起被頂起。
第二我覺得如果有這樣的需求那底部應(yīng)該不放過多控件,而是用dialog或者popWindow來做。
以上2種方式都可以避免類似問題, 不過我這倆種方式讓我感覺解決的很不爽, 應(yīng)該還有更加巧妙的方式啊!!
總結(jié)
以上是生活随笔為你收集整理的Android 输入法挤压屏幕解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文了解CDN应用加速
- 下一篇: Android:修改默认音量等级