1. 程式人生 > >android開發步步為營之102:通過xml設定或者程式碼動態設定windowSoftInputMode

android開發步步為營之102:通過xml設定或者程式碼動態設定windowSoftInputMode

        windowSoftInputMode這個Activity屬性,經常會用到了,用來設定鍵盤的彈出與否,因為鍵盤的彈出會影響整個頁面的佈局的。最近專案裡,有個需求,編輯圖片上面一個標題的時候,頁面不被頂上去,為的是上面的標題在輸入的時候可見,然後編輯下面一個標題的時候,頁面需要頂上去,為的是下面這個標題可見。這種情況就需要動態設定windowSoftInputMode了,先給出效果圖:

          編輯上面標題,頁面不彈上去


編輯下面標題時,頁面彈上去


  好,怎麼做的呢?

第一個效果需要動態設定windowSoftInputMode為:

getWindow().setSoftInputMode(WindowManager
.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

       第二個效果需要動態設定windowSoftInputMode為:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

在AndroidManifest.xml這麼設定:

 <activity
            android:name=".activity.TestActivity"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.NoTitleBar"
            android:windowSoftInputMode="stateAlwaysVisible" />
         好的,給出各種SoftInputMode的屬性值,供參考:

1、stateUnspecified:軟鍵盤的狀態並沒有指定,系統將選擇一個合適的狀態或依賴於主題的設定

2、stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity裡的狀態,無論是隱藏還是顯示

3、stateHidden:使用者選擇activity時,軟鍵盤總是被隱藏

4、stateAlwaysHidden:當該Activity主視窗獲取焦點時,軟鍵盤也總是被隱藏的

5、stateVisible:軟鍵盤通常是可見的

6、stateAlwaysVisible:使用者選擇activity時,軟鍵盤總是顯示的狀態

7、adjustUnspecified:預設設定,通常由系統自行決定是隱藏還是顯示

8、adjustResize:該Activity總是調整螢幕的大小以便留出軟鍵盤的空間

9、adjustPan:當前視窗的內容將自動移動以便當前焦點從不被鍵盤覆蓋和使用者能總是看到輸入內容的部分