Android輸入法顯示、EditText多行輸入和回車監(jiān)聽

一、輸入法的顯示和隱藏

1、配置 進入頁面自動顯示輸入法

AndroidManifest.xml 中配置windowSoftInputMode屬性

android:windowSoftInputMode="adjustPan|stateVisible"

該屬性主要影響兩件事情:

【一】當(dāng)有焦點產(chǎn)生時,軟鍵盤是隱藏還是顯示

【二】是否減少活動主窗口大小以便騰出空間放軟鍵盤

【A】stateUnspecified:軟鍵盤的狀態(tài)并沒有指定,系統(tǒng)將選擇一個合適的狀態(tài)或依賴于主題的設(shè)置

【B】stateUnchanged:當(dāng)這個activity出現(xiàn)時,軟鍵盤將一直保持在上一個activity里的狀態(tài),無論是隱藏還是顯示

【C】stateHidden:用戶選擇activity時,軟鍵盤總是被隱藏

【D】stateAlwaysHidden:當(dāng)該Activity主窗口獲取焦點時,軟鍵盤也總是被隱藏的

【E】stateVisible:軟鍵盤通常是可見的

【F】stateAlwaysVisible:用戶選擇activity時,軟鍵盤總是顯示的狀態(tài)


【G】adjustUnspecified:默認設(shè)置,通常由系統(tǒng)自行決定是隱藏還是顯示

【H】adjustResize:該Activity總是調(diào)整屏幕的大小以便留出軟鍵盤的空間。主布局可能出現(xiàn)壓縮變形。

【I】adjustPan:當(dāng)前窗口的內(nèi)容將自動移動以便當(dāng)前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內(nèi)容的部分。主布局會自動上移,導(dǎo)航欄也會移出顯示區(qū)域。

2、手動顯示和隱藏輸入法

(1)方式一:

顯示輸入法:showSoftInput

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

隱藏輸入法:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(ed_editTextView.getWindowToken(),0);


(2)方式二

使用toggleSoftInput() 來切換 輸入的顯示和隱藏:

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

二、EditText多行顯示,并且監(jiān)聽鍵盤的回車鍵按下動作。

在做項目的過程中 可能會遇到這樣的需求:點擊EditText彈出輸入法,用戶可以輸入多行能容,點擊回車鍵,將用戶輸入內(nèi)容進行采集,隱藏軟鍵盤,并將信息發(fā)送出去(如微信聊天頁面 輸入文本消息,進行發(fā)送操作)

1、嘗試一:

(1)配置EditText:

? ? <android:id="@+id/ed_editTextView"

? ? ? ? ?android:layout_width="match_parent"

? ? ? ? android:layout_height="wrap_content"

????? ? android:layout_alignParentBottom="true"

? ? ????android:imeOptions="actionSend"

? ? ????android:inputType="textMultiLine"

? ? />

(2)為EditText設(shè)置setOnEditorActionListener,檢測用戶點擊回車鍵的動作

ed_editTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() { ????@Override public

? ? boolean onEditorAction(TextView textView, int actionId, KeyEvent event) {

????if (actionId == EditorInfo.IME_ACTION_UNSPECIFIED || actionId == ????????EditorInfo.IME_ACTION_SEND || (event != null && event.getKeyCode() == ????????KeyEvent.KEYCODE_ENTER)) {

????????????ed_editTextView.clearFocus();

? ? ? ? ? Log.d("111","檢測到回車鍵");

}

return true;

}

});

注意:

一定要設(shè)置 ?android:inputType="textMultiLine" 和?android:imeOptions="actionSend" 才能監(jiān)聽到?setOnEditorActionListener 回車事件

如上的用法,在搜狗輸入法下 可以完美的實現(xiàn) 多行輸入,同時監(jiān)聽回車按鍵,但是切換成Android系統(tǒng)自帶的輸入法或這其他輸入法后,按下輸入法回車鍵,動作只是換行,并不觸發(fā)setOnEditorActionListener 監(jiān)聽回調(diào)。

2、嘗試2:

原來這是EditText 的限制,在inputType =?textMultiLine 時,點擊回車鍵的默認操作就是換行,不會有其他的事件觸發(fā)。只有將inputType =?text 或者限定為singleline 單行輸入時 才能監(jiān)聽到額外的事件

于是轉(zhuǎn)換思路:將EditText設(shè)置為單行輸入,監(jiān)聽輸入法回車事件,同時想辦法 讓輸入內(nèi)容大于EditText寬度時自動換行。

(1)設(shè)置EditView為單行輸入

? ? <android:id="@+id/ed_editTextView"

? ? android:layout_width="match_parent"

? ? android:layout_height="wrap_content"

? ? android:layout_alignParentBottom="true"

? ? android:imeOptions="actionSend"

? ? android:inputType="text"

? ? />

(2)初始化EditView時 設(shè)置起 自動換行

ed_editTextView = (EditText) findViewById(R.id.ed_editTextView); ed_editTextView.setMaxLines(Integer.MAX_VALUE); ed_editTextView.setHorizontallyScrolling(false);

(3)設(shè)置 setOnEditorActionListener,監(jiān)聽 回車事件



ed_editTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() { ????@Override public

? ? boolean onEditorAction(TextView textView, int actionId, KeyEvent event) {

????if (actionId == EditorInfo.IME_ACTION_UNSPECIFIED || actionId == ????????EditorInfo.IME_ACTION_SEND || (event != null && event.getKeyCode() == ????????KeyEvent.KEYCODE_ENTER)) {

????????????ed_editTextView.clearFocus();

? ? ? ? ? Log.d("111","檢測到回車鍵");

}

return true;

}

});


參考文章:http://m.itdecent.cn/p/701fb57269d0

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容