1. 程式人生 > >設定EditText獲得焦點,同時彈出小鍵盤

設定EditText獲得焦點,同時彈出小鍵盤

關於這個EditText獲得焦點,彈出小鍵盤的問題,前不久的專案中糾結了筆者一段時間需求是:進入Activity後,讓EditText獲得焦點,同時彈出小鍵盤供使用者輸入!試了很多網上的方法都不可以,不知道是不是因為筆者用的5.1的系統的問題!下面小結下:

首先是讓EditText獲得焦點與清除焦點的

edit.requestFocus(); //請求獲取焦點
edit.clearFocus(); //清除焦點

獲得焦點後,彈出小鍵盤,筆者大部分時間就花在這個上:

  • 低版本的系統直接requestFocus就會自動彈出小鍵盤了
  • 稍微高一點的版本則需要我們手動地去彈鍵盤:第一種:
InputMethodManager
imm =(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);

第二種:

InputMethodManager imm =(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);     imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);  
imm.hideSoftInputFromWindow
(view.getWindowToken(),0);//強制隱藏鍵盤

不知道是什麼原因,上面這兩種方法並沒有彈出小鍵盤,筆者最後使用了:windowSoftInputMode屬性解決了彈出小鍵盤的問題,這裡跟大家分享下:

android:windowSoftInputModeActivity主視窗與軟鍵盤的互動模式,可以用來避免輸入法面板遮擋問題,Android1.5後的一個新特性。
這個屬效能影響兩件事情:
【一】當有焦點產生時,軟鍵盤是隱藏還是顯示
【二】是否減少活動主視窗大小以便騰出空間放軟鍵盤

簡單點就是有焦點時的鍵盤控制以及是否減少Act的視窗大小,用來放小鍵盤
有下述值可供選擇,可設定多個值,用"|"分開
stateUnspecified

:軟鍵盤的狀態並沒有指定,系統將選擇一個合適的狀態或依賴於主題的設定
stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity裡的狀態,無論是隱藏還是顯示
stateHidden:使用者選擇activity時,軟鍵盤總是被隱藏
stateAlwaysHidden:當該Activity主視窗獲取焦點時,軟鍵盤也總是被隱藏的
stateVisible:軟鍵盤通常是可見的
stateAlwaysVisible:使用者選擇activity時,軟鍵盤總是顯示的狀態
adjustUnspecified:預設設定,通常由系統自行決定是隱藏還是顯示
adjustResize:該Activity總是調整螢幕的大小以便留出軟鍵盤的空間
adjustPan:當前視窗的內容將自動移動以便當前焦點從不被鍵盤覆蓋和使用者能總是看到輸入內容的部分

我們可以在AndroidManifest.xml為需要彈出小鍵盤的Activity設定這個屬性,比如:

然後在EditText物件requestFocus()就可以了~

8.EditText游標位置的控制

有時可能需要我們控制EditText中的游標移動到指定位置或者選中某些文字!
EditText為我們提供了setSelection()的方法,方法有兩種形式:


一個引數的是設定游標位置的,兩個引數的是設定起始位置與結束位置的中間括的部分,即部分選中!
當然我們也可以呼叫setSelectAllOnFocus(true);讓EditText獲得焦點時選中全部文字!
另外我們還可以呼叫setCursorVisible(false);設定游標不顯示
還可以呼叫getSelectionStart()getSelectionEnd獲得當前游標的前後位置