Android EditText 的使用及值得注意的地方

發表於2016-07-13

Android上有很多輸入法應用,每種輸入法都有各自的特點,輸入法多數時候是和EditText配合使用,結合我自己的親身實踐分享一下使用EditText過程中遇到的一些問題及解決方法。

設定預設輸入法

有時候為了提高使用者體驗,在彈出輸入法時需要設定預設的輸入狀態,比如單詞應用彈出輸入法時,輸入法最好是在英文輸入狀態下。如果是字典應用,彈出輸入法時最好是在中文輸入狀態下,Android並沒有提供設定預設的輸入狀態的介面,但我們可以通過如下方法一樣能夠達到想要的效果:

預設中文:

預設英文:

開啟和關閉輸入法

手動控制輸入法的開關狀態也能提升使用者體驗,比如:

  • 有的搜尋框會有一個清除按鈕,點選清除按鈕時就應該彈出輸入法,因為使用者清除搜尋內容的目的多數時候是需要輸入新的內容;
  • 執行搜尋時應該隱藏輸入法,因為顯示輸入法時會遮擋搜尋結果,使用者體驗不太好;
  • 鬧鐘來時或者有其它window彈出時應該隱藏輸入法,因為輸入法也是window,如果不隱藏可能導致輸入法遮擋住了其它window等使用者體驗不太友好的問題。

開啟輸入法:

關閉輸入法:

監聽EditText的輸入狀態

  • 類似新浪微博,在輸入內容時會提示還可以輸入多少字;
  • 有的搜尋引擎,輸入內容時實時顯示搜尋結果;
  • 有的輸入框有輸入長度限制,輸入內容超過長度限制時彈出提示資訊。

上面這些都可以通過監聽EditText的輸入狀態來實現,具體實現方式如下:

監聽輸入法中的回車按鈕

比如搜狗輸入法的右下角有一個回車按鈕,我們希望使用者點選它時也執行確認功能,可以通過監聽EditText的按鍵點選事件來實現:

改變輸入法中回車按鈕的顯示內容

如果回車按鈕是執行搜尋功能,則回車按鈕上顯示”搜尋”,如果是執行傳送功能,則顯示”傳送”,如果是下一步,則顯示”下一步”。

實現這個功能需要呼叫EditText的setImeOptions方法:

限制輸入內容

有時候我們根本就不想使用者輸入一些雜七雜八的內容,因為這需要程式針對輸入的內容做各種處理,如果處理不當還會有好多不可預見的問題,索性在輸入內容時就禁止使用者輸入一些非法字元,這可以通過下面的方式實現,新建一個類InputTxtFilter:

在初始化EditText時,呼叫InputTxtFilter的inputFilter方法,傳入輸入長度限制、輸入內容的型別限制等即可,eg:

遮蔽EditText的複製、貼上功能

在低版本的Android SDK中,如果對EditText的輸入長度有限制時,長按EditText並將選中的內容拖動到EditText輸入框中,如果這時候的長度超過了EditText的輸入長度限制,程式會直接崩潰掉,在高版本的Android SDK中這個問題已經改了,如果出現上面的情況會直接清空輸入框中的內容,為了避免這種討厭的問題,我們可以遮蔽EditText的複製和貼上功能,只需要遮蔽EditText的長按響應即可:

相關文章