Android之EditText不自動獲取焦點

  1. 在EditText的父佈局中的佈局文件中設置這兩行代碼
    android:focusable="true"
    android:focusableInTouchMode="true"

     

  2. 在代碼中設置EditText焦點通過setFocusable()和setFocusableInTouchMode() 不過這個好像不怎麼管用
  3. 如果你是不是想跳轉到有EditText的界面時自動彈出軟鍵盤的話 可以在功能清單文件(AndroidManifest.xml) 中的相對應activity節點中設置軟鍵盤彈出模式
    
       android:windowSoftInputMode="adjustPan|stateHidden"

     

關於 windowSoftInputMode屬性:stateUnspecified,stateUnchanged,stateHidden,stateAlwaysHidden,stateVisible,stateAlwaysVisible,adjustUnspecified,adjustResize,adjustPan。

當我們設置屬性的時候可以設置一個或多個("state...|adjust")

  1. stateUnspecified
    中文的意思是未指定狀態,當我們沒有設置android:windowSoftInputMode屬性的時候,軟件默認採用的就是這種交互方式,系統會根據界面採取相應的軟鍵盤的顯示模式。當設置屬性爲stateUnspecified的時候,系統是默認不彈出軟鍵盤的,但是當有獲得焦點的輸入框的界面有滾動的需求的時候,會自動彈出軟鍵盤;讓界面不自動彈出軟鍵盤的其中一個解決方案,就是可以在xml文件中,設置一個非輸入框控件獲取焦點,從而阻止鍵盤彈出。

    1)如果界面上只有文本和按鈕的時候,軟鍵盤就不會自動彈出;

    2)如果界面上出現了獲取了焦點的輸入框時,

          a、如果界面沒有滾動需求,軟鍵盤不會自動彈出;

          b、如果界面有滾動需求(如界面中有RecyclerView、ScrollView等可以滑動的控件)時,軟鍵盤會自動彈出。

  2. stateUnchanged
    中文的意思是狀態不改變的意思,當前界面的軟鍵盤狀態,取決於上一個界面的軟鍵盤狀態,軟鍵盤將一直保持在上一個activity裏的狀態,無論是隱藏還是顯示。

  3. stateHidden
    顧名思義,如果我們設置了這個屬性,那麼鍵盤的狀態一定是隱藏的,軟鍵盤總是被隱藏。

  4. stateAlwaysHidden
    狀態隱藏,如果我們設置了這個屬性,鍵盤狀態就一定是隱藏的。和stateHidden效果幾乎一樣(暫未發現不同之處),比stateHidden隱藏範圍更廣

  5. stateVisible
    狀態顯示,如果設置了該屬性值,那麼會把鍵盤召喚出來,即使在界面上沒有輸入框的情況下也會強制召喚出來。
  6. stateAlwaysVisible
    狀態顯示,這個屬性也是可以將鍵盤召喚出來,與stateVisible屬性小小的區別是:當我們設置爲stateVisible屬性,如果當前的界面鍵盤是顯示的,當我們點擊按鈕跳轉到下個界面的時候,如果在新的頁面軟鍵盤隱藏起來,當我們再次回到當前頁面的時候,鍵盤也是隱藏的;但是如果我們設置了當前頁面爲stateAlwaysVisible,跳轉到下個頁面,再回到當前頁面的時候,軟鍵盤也是會顯示出來的。
  7. adjustUnspecified
    默認設置,當沒有設置這個值的時候,這個選項也是默認的設置模式。系統會根據界面選擇不同的模式。如果界面裏面有可以滾動的控件,比如ScrowView,系統會減小可以滾動的界面的大小,從而保證即使軟鍵盤顯示出來了,也能夠看到所有的內容。如果佈局裏面沒有滾動的控件,那麼軟鍵盤可能就會蓋住一些內容(軟鍵盤下面的佈局都被遮擋住了,若想修改,只能隱藏軟鍵盤,然後選擇。而且,重點注意一下上面的佈局,當我們選擇的輸入框偏下的時候,上面的標題欄和佈局被軟鍵盤頂上去了)。
  8. adjustResize 
    調整大小狀態 這個屬性表示Activity的主窗口總是會被調整大小,從而保證軟鍵盤顯示空間。設置爲adjustResize屬性之後,對於界面中有可滑動控件,顯示效果跟adjustUnspecified顯示效果一樣;如果界面中沒有可滑動控件,軟鍵盤可能會蓋住一些控件(佈局的位置不會發生變化,可能獲取了焦點的控件被軟鍵盤蓋住)。對於沒有滑動控件的佈局,雖然還是不能選擇所有的輸入框,但是,窗口的顯示方式發生了變化,默認屬性時,整個佈局是被頂上去了,但是設置爲adjustResize屬性,佈局的位置並沒有發生什麼變化,這就是最大的區別。
  9. adjustPan
    當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內容的部分。如果設置了這個屬性,當軟鍵盤彈出的時候,系統會通過佈局的移動,來保證用戶要進行輸入的輸入框在用戶的視線範圍內。如果界面沒有可滑動控件,顯示效果和adjustUnspecified效果一樣;如果界面有可滑動控件,在軟鍵盤顯示的時候,可能會有一些內容顯示不出來。

    注:對於沒有滾動控件的佈局來說,採用的是adjustPan方式;對於有滾動控件的佈局來說,採用的是adjustResize方式。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章