Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 軟鍵盤用法總結

軟鍵盤用法總結

編輯:關於Android編程

軟鍵盤用法

在android開發中,軟鍵盤是一個比較常用的了。總結下來,再也不用去網上搜資料了。

1、軟鍵盤原理

在android中,軟鍵盤原理上是一個dialog,InputMethodService為我們的輸入法創建了一個Dialog,並且對某些參數進行了設置,使之能夠在底部或者全屏顯示。當我們點擊輸入框時,系統會對當前的主窗口進行調整,以便留出相應的空間來顯示該Dialog在底部,或者全屏。

2、如何顯示和隱藏軟鍵盤

2.1顯示軟鍵盤

方法一(如果輸入法在窗口上已經顯示,則隱藏,反之則顯示)

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 

方法二(view為接受軟鍵盤輸入的視圖,SHOW_FORCED表示強制顯示)

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);  

2.2隱藏軟鍵盤

imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //強制隱藏鍵盤  

2.3默認不彈出軟鍵盤最簡單的方法

在Activity的清單文件中,添加屬性
Android:windowSoftInputMode=”stateHidden”如下:

     
    

3、輸入框被軟鍵盤蓋住如何解決

方法一

在你的activity中的oncreate中setContentView之前寫上這個代碼getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

方法二

在項目的AndroidManifest.xml文件中界面對應的裡加入android:windowSoftInputMode="stateVisible|adjustResize",這樣會讓屏幕整體上移。
如果加上的是 android:windowSoftInputMode="adjustPan"這樣鍵盤就會覆蓋屏幕。

方法三

把頂級的layout替換成ScrollView,或者說在頂級的Layout上面再加一層ScrollView的封裝。這樣就會把軟鍵盤和輸入框一起滾動了,軟鍵盤會一直處於底部。

4、windowSoftInputMode屬性講解(下面這段內容我參考別人的博客,並加入我的一些意見)

我們從這個屬性的名稱中,可以很直觀的看出它的作用,這個屬性就是來設置窗口軟鍵盤的交互模式的。android:windowSoftInputMode屬性一共有9個取值,分別是:

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

我們可以在這9個值裡面選擇一個,也可以用”state…|adjust”的形式進行設置。那麼,下面我們就介紹這9個值到底是如何影響軟鍵盤的顯示的。

1.stateUnspecified

中文意思是未指定狀態。當我們沒有設置android:windowSoftInputMode屬性的時候,軟件默認采用的就是這種交互方式,系統會根據界面采取相應的軟鍵盤的顯示模式,並且在不同的手機上,顯示是不同的。比如,當界面上只有文本和按鈕的時候,軟鍵盤就不會自動彈出,因為沒有輸入的必要。那麼,當界面上出現了獲取了焦點的輸入框的時候,軟鍵盤會不會自動的彈出呢?這個還真不一定!比如,在下面的這個界面布局中,有的手機軟鍵盤並不會自動彈出,但有的手機會彈出來的。

\

就是說,默認的,在這種界面情況下,系統並不確定用戶是否需要軟鍵盤,因此不一定自動彈出。但是,為什麼說不一定呢?這是因為,如果我們在這個布局的外面,包裹上一個ScrollView,軟鍵盤就會自動的彈出來了!
如下,在這種布局文件下,軟鍵盤會自動的彈出

2.stateUnchanged

中文的意思就是狀態不改變的意思,我們應該怎麼理解這句話呢?其實很好理解,就是說,當前界面的軟鍵盤狀態,取決於上一個界面的軟鍵盤狀態。舉個例子,假如當前界面鍵盤是隱藏的,那麼跳轉之後的界面,軟鍵盤也是隱藏的;如果當前界面是顯示的,那麼跳轉之後的界面,軟鍵盤也是顯示狀態。這個很好理解。

3.stateHidden

顧名思義,如果我們設置了這個屬性,那麼鍵盤狀態一定是隱藏的,不管上個界面什麼狀態,也不管當前界面有沒有輸入的需求,反正就是不顯示。因此,我們可以設置這個屬性,來控制軟鍵盤不自動的彈出。但是當輸入框獲取焦點的時候還是會彈出來的,看下面界面:

\

當我初次打開這個頁面的時候,看到沒,這個輸入框是有焦點的,但是沒有彈出軟鍵盤,但是當你再次點擊輸入框的時候會再次彈出軟鍵盤,下面就是默認不彈出軟鍵盤簡單方法。

      
     

4.stateAlwaysHidden

用戶選擇activity時,軟鍵盤總是被隱藏,我並不知道和stateHidden的區別

5.stateVisible

設置為這個屬性,可以將軟鍵盤召喚出來,即使在界面上沒有輸入框的情況下也可以強制召喚出來。

6.stateAlwaysVisible

這個屬性也是可以將鍵盤召喚出來,但是與stateVisible屬性有小小的不同之處。舉個例子,當我們設置為stateVisible屬性,如果當前的界面鍵盤是顯示的,當我們點擊按鈕跳轉到下個界面的時候,軟鍵盤會因為輸入框失去焦點而隱藏起來,當我們再次回到當前界面的時候,鍵盤這個時候是隱藏的。但是如果我們設置為stateAlwaysVisible,我們跳轉到下個界面,軟鍵盤還是隱藏的,但是當我們再次回來的時候,軟鍵盤是會顯示出來的。所以,這個Always就解釋了這個區別,不管什麼情況到達當前界面(正常跳轉或者是上一個界面被用戶返回),軟鍵盤都是顯示狀態。
說到這裡,我聯想到了上面的stateHidden和stateAlwaysHidden,我估計區別也是這樣的,就是說,stateAlwaysHidden無論如何都是隱藏的,但是如果在跳轉到下個界面的時候,軟鍵盤被召喚出來了,那麼當下個界面被用戶返回的時候,鍵盤應該是不會被隱藏的,但是,我還沒有找到能夠跳轉到下個界面,還讓當前界面軟鍵盤不消失的方法,所以暫時不能驗證。

7.adjustUnspecified

默認設置,通常由系統自行決定是隱藏還是顯示,這個屬性,我在手機上搗鼓了半天,沒明白它是做什麼用的,用了解的小伙伴可以告訴我。謝謝。

8.adjustResize

這個屬性表示Activity的主窗口總是會被調整大小,從而保證軟鍵盤顯示空間。請大家看圖,對於沒有Scrollview的布局,默認屬性時,整個布局是被頂上去了,但是設置為adjustResize屬性,布局的位置並沒有發生什麼變化,而是被覆蓋,我試過不管有沒有ScrolView都是這樣,這就是最大的區別。

\

當點擊“請輸入文字4”所在的輸入框,效果圖是這樣的:

看到沒,“請輸入文字4”所在的輸入框被覆蓋了。

總結一下:當設置成adjustResize後,軟鍵盤會覆蓋界面,甚至會覆蓋文本框,而不會調整界面大小去顯示輸入框,而且不管有沒有ScrolView都是一樣的。

9.adjustPan

如果設置為這個屬性,那麼Activity的屏幕大小並不會調整來保證軟鍵盤的空間,而是采取了另外一種策略,系統會通過布局的移動,來保證用戶要進行輸入的輸入框肯定在用戶的視野范圍裡面,從而讓用戶可以看到自己輸入的內容。對於沒有滾動控件的布局來說,這個其實就是默認的設置,如果我們選擇的位置偏下,上面的標題欄和部分控件會被頂上去。但是對於有滾動控件的布局來說,則不太一樣,我們看下面的效果圖。

首先,這是軟鍵盤沒有彈出的時候,有Scroll的顯示范圍。

\

當我們點擊“請輸入文字4”所在的輸入框,我們會發現下面的現象。 最上面標題欄已經不能看到了。 而且還不能滑動,上下都不能滑動。是不是很奇怪。

總結

通過以上的實驗,我們可以得出結論,如果我們不設置”adjust…”的屬性,對於沒有滾動控件的布局來說,采用的是adjustPan方式,而對於有滾動控件的布局,則是采用的adjustResize方式。了解了上面的這些知識之後,我們就可以根據自己的需求設置不同的方式了。而且,關於如何使得界面加載的時候不顯示軟鍵盤,我們也有了一個很清楚的認識。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved