Android軟鍵盤遮擋的四種解決方案
-
問題概述
在編輯框輸入內容時會彈出軟鍵盤,而手機螢幕區域有限往往會遮住輸入介面,我們先看一下問題效果圖:
輸入使用者名稱和密碼時,系統會彈出鍵盤,造成系統鍵盤會擋住文字框的問題,如圖所示:
輸入密碼時輸入框被系統鍵盤遮擋了,大大降低了使用者操作體驗,這就是開發中非常常見的軟鍵盤遮擋的問題,該如何解決?
-
簡單解決方案
方法一
在你的activity中的oncreate中setContentView之前寫上這個程式碼
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
方法二
在 專案的AndroidManifest.xml檔案中介面對應的<activity>里加入
這樣會讓螢幕整體上移。如果加上的 是 android:windowSoftInputMode="adjustPan"這樣鍵盤就會覆蓋螢幕。
關於android:windowSoftInputMode
activity主視窗與軟鍵盤的互動模式,可以用來避免輸入法面板遮擋問題,Android1.5後的一個新特性。
這個屬效能影響兩件事情:
【一】當有焦點產生時,軟鍵盤是隱藏還是顯示
【二】是否減少活動主視窗大小以便騰出空間放軟鍵盤
它的設定必須是下面列表中的一個值,或一個”state…”值加一個”adjust…”值的組合。在任一組設定多個值——多個”state…”values,例如&mdash有未定義的結果。各個值之間用|分開。
例如:
<activityandroid:windowSoftInputMode="stateVisible|adjustResize". . . >
在這設定的值(除"stateUnspecified"和"adjustUnspecified"以外)將覆蓋在主題中設定的值
方法三
把頂級的layout替換成ScrollView,或者說在頂級的Layout上面再加一層ScrollView。這樣就會把軟鍵盤和輸入框一起滾動了,軟鍵盤會一直處於底部。
-
程式碼可控性方法
1、主介面佈局檔案
2、自定義LinearLayoutView
該元件可實現根據軟鍵盤的彈出/關閉而隱藏和顯示某些區域,這是問題解決最關鍵部分,主要有兩點:
① 重寫onSizeChanged方法
該方法是View生命週期的方法,當View尺寸發生變化時呼叫,如豎屏橫屏切換、軟鍵盤彈出。這裡當軟鍵盤彈出造成View尺寸改變,就會呼叫onSizeChanged方法,在該方法實現程式碼的核心思想是根據尺寸變化,當變大(軟鍵盤彈出),將某些區域隱藏以給編輯介面預留出足夠顯示空間;當恢復(軟鍵盤關閉),再將隱藏的區域顯示出來
②提供KeyBordStateListener 介面採用回撥機制呼叫介面的實現方法。
3.主介面MainActivit
-
實現效果
鍵盤彈出:
鍵盤關閉: