解決android:imeOptions=”actionDone”在中文輸入法時無回應的問題

若有開發android app的愛好者們,應該會很常用到EditText這一個widget

其中有個屬性為android:imeOptions,主要用於當使用者輸入完成後,按下某一個按鍵後,觸發OnEditorActionListener事件來處理一些東西。

例如設定android:imeOptions=”actionDone”,代表按下”done”或”enter”按鍵時,會觸發。

然而就在一切都很美好的狀況下,這玩意兒在中文輸入法時(以htc的手機為例),按下"enter"鍵都無回應。看來在中文輸入法的"enter"鍵沒有對應到actionDone。

那該怎麼解決呢?

分為兩部分,一部分是xml的描述,一部分是程式碼

  • 在layout xml描述部分,將android:imeOptions設定為”actionDone|actionUnspecified”
  • 程式碼部分,在OnEditorActionListener實現下列判斷式
 private OnEditorActionListener mInputOnEditorActionListener = new OnEditorActionListener() {

        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            boolean handled = false;
            // 若是按下Done or Enter都可輸入
            if (actionId == EditorInfo.IME_ACTION_DONE
                    || (actionId == EditorInfo.IME_ACTION_UNSPECIFIED && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                    
                // 流程處理
                handled = true;
                
            } /* end of if */
            
            return handled;
        }

    };

[Android] - 不讓鍵盤蓋掉EditText

我想或多或少的Android開發人員會遇到在點選EditText開啟鍵盤時

發現你的EditText被蓋住了~向下圖

(image credit:stackoverflow)

那要如何避免這種狀況發生了,我在參考了stackoverflow, android developer網站後,有幾個不錯參考的文章

主要設定方式要在專案當中的AndroidManifest.xml的Activity節點當中,設定屬性android:windowSoftInputMode,將該屬性設定android:windowSoftInputMode=”stateVisible|adjustResize|adjustPan”即可。