Android窗口軟鍵盤調整的關鍵:windowSoftInputMode屬性設置
windowSoftInputMode 是 Android 中的一個屬性,定義了當屏幕上有焦點且需要顯示軟鍵盤(即屏幕鍵盤)時,活動(Activity)窗口應該如何調整。屬性位于 AndroidManifest.xml 文件中,針對每個 <activity> 標簽進行設置。
<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
</activity>
windowSoftInputMode 有多個可能的值,可以分為兩類:state 前綴的值和 adjust 前綴的值。
- 「state 前綴的值」:
stateUnspecified:軟鍵盤的默認狀態由系統決定。
stateUnchanged:軟鍵盤將保持上一次的狀態,無論是可見還是隱藏。
stateHidden:當 Activity 被創建時,軟鍵盤是隱藏的。
stateAlwaysHidden:軟鍵盤總是隱藏的,即使用戶選擇了一個需要輸入文本的字段。
stateVisible:當 Activity 被創建時,軟鍵盤是可見的。
stateAlwaysVisible:軟鍵盤總是可見的。
- 「adjust 前綴的值」:
adjustUnspecified:默認調整方式。系統的選擇取決于屏幕大小和窗口是否可調整大小。
adjustResize:當軟鍵盤顯示時,窗口會調整大小,以便為軟鍵盤騰出空間。這通常意味著窗口的內容會向上移動,以便為鍵盤騰出空間。
adjustPan:窗口內容不會調整大小,而是向上平移,以便當前獲得焦點的字段不被鍵盤遮擋。
在AndroidManifest.xml設置:
<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
</activity>
在代碼中設置:
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}
}
這些值可以通過 "|" 符號分隔進行組合,在上面的代碼中,stateHidden 和 adjustResize 被組合在一起使用。
windowSoftInputMode 常用的屬性有 adjustPan,adjustResize,adjustNothing
adjustPan
窗口內容不會調整大小,而是向上平移,以便當前獲得焦點的字段不被鍵盤遮擋。Activity窗口(DecorView)大小不變。當獲取到焦點的EditText位于屏幕下方,軟鍵盤彈出會遮擋到EditText時,整個DecorView會往上移動,至于上移多少并不確定。一般是上移至使EditText剛好不被軟鍵盤遮擋住為止。
圖片
adjustResize
當軟鍵盤顯示時,窗口會調整大小,以便為軟鍵盤騰出空間。通常意味著窗口的內容會向上移動,以便為鍵盤騰出空間。DecorView大小不會改變,內容區contentView(id = android.R.content)會相應的縮小為鍵盤騰出空間。
圖片
注意:adjustResize只是調整contentView的大小,所以還是有可能覆蓋掉EditText。
adjustNothing
Activity窗口不會做任何調整,contentView大小也不會改變。