Android EditText 不得不说的InputFilter、TextWatcher、ActionMode.Callback、OnEditorActionListener
開(kāi)發(fā)過(guò)程中,輸入內(nèi)容往往會(huì)遇到各種奇葩的限制輸入1、輸入內(nèi)容的限定editText.setFilters()?
editText.setFilters(new InputFilter[]{new InputFilter() {/*** editText 內(nèi)容不變處理* @param source 變化的字符串* @param start 變化字符的首字符下標(biāo)* @param end 變化字符的尾字符下* @param dest 帶光標(biāo)的字符串* @param dstart 光標(biāo)的起始位置* @param dend 光標(biāo)的結(jié)束位置* @return 返回null,表示可正常添加source字符串;返回"",表示不變動(dòng)原字符*/@Overridepublic CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {//假設(shè),我們限制 "\n"String sourceStr = source.toString();if ("\n".equals(sourceStr)){//內(nèi)容包含\nreturn ""; //不變動(dòng)原字符}return null; //添加source字符串}}});2、判斷編輯框是否有內(nèi)容等,可以通過(guò)設(shè)置editText.addTextChangedListener()
editText.addTextChangedListener(new TextWatcher() {/*** 內(nèi)容改變前調(diào)用* @param s 修改之前的文字* @param start 字符串中即將發(fā)生修改的位置* @param count 字符串中即將被修改的文字的長(zhǎng)度。如果是新增的話則為0* @param after 被修改的文字修改之后的長(zhǎng)度。如果是刪除的話則為0*/@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}/*** 內(nèi)容改變過(guò)程中調(diào)用* @param s 改變后的字符串* @param start 有變動(dòng)的字符串的位置* @param before 被改變的字符串長(zhǎng)度,如果是新增則為0* @param count 添加的字符串長(zhǎng)度,如果是刪除則為0*/@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}/*** 內(nèi)容改變后調(diào)用* @param s*/@Overridepublic void afterTextChanged(Editable s) {}});3、屏蔽EditText的復(fù)制、粘貼功能editText.setLongClickable(false)、editText.setCustomSelectionActionModeCallback()
editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {@Overridepublic boolean onCreateActionMode(ActionMode mode, Menu menu) {return false;}@Overridepublic boolean onPrepareActionMode(ActionMode mode, Menu menu) {return false;}@Overridepublic boolean onActionItemClicked(ActionMode mode, MenuItem item) {return false;}@Overridepublic void onDestroyActionMode(ActionMode mode) {}});4、鍵盤(pán)確認(rèn)按鈕或者搜索功能editText.setOnEditorActionListener()
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {@Overridepublic boolean onEditorAction(TextView v, int actionId, KeyEvent event) {//actionId 事件id 如:actionId == EditorInfo.IME_ACTION_SEARCH 搜索功能return false;}});?
5、監(jiān)聽(tīng)鍵盤(pán)事件 editText.setOnKeyListener()?
editText.setOnKeyListener(new View.OnKeyListener() {@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {return false;}});ps:調(diào)用軟鍵盤(pán)搜索的setOnKeyListener方法事件執(zhí)行兩次(setOnKeyListener之所以執(zhí)行兩次就是因?yàn)閐own和up占用)
6、editText.setKeyListener()限制輸入
限定只能輸入數(shù)字:editText.setKeyListener(DigitsKeyListener.getInstance("0123456789"))
系統(tǒng)定義好的:
BaseKeyListener
DateKeyListener
DateTimeKeyListener
DialerKeyListener
DigitsKeyListener
MultiTapKeyListener,
NumberKeyListener
QwertyKeyListener
TextKeyListener,
TimeKeyListener
?
//自定義限制 editText.setKeyListener(new KeyListener() {@Overridepublic int getInputType() {return 0;}@Overridepublic boolean onKeyDown(View view, Editable text, int keyCode, KeyEvent event) {return false;}@Overridepublic boolean onKeyUp(View view, Editable text, int keyCode, KeyEvent event) {return false;}@Overridepublic boolean onKeyOther(View view, Editable text, KeyEvent event) {return false;}@Overridepublic void clearMetaKeyState(View view, Editable content, int states) {}}); 輸入內(nèi)容限制 editText.setInputType(EditorInfo.TYPE_CLASS_TEXT); 內(nèi)容會(huì)一行可滑動(dòng)顯示 //輸入類(lèi)型為沒(méi)有指定明確的類(lèi)型的特殊內(nèi)容類(lèi)型editText.setInputType(InputType.TYPE_NULL);//輸入類(lèi)型為普通文本editText.setInputType(InputType.TYPE_CLASS_TEXT);//輸入類(lèi)型為數(shù)字文本editText.setInputType(InputType.TYPE_CLASS_NUMBER);//輸入類(lèi)型為電話號(hào)碼editText.setInputType(InputType.TYPE_CLASS_PHONE);//輸入類(lèi)型為日期和時(shí)間editText.setInputType(InputType.TYPE_CLASS_DATETIME);//輸入類(lèi)型為{@link#TYPE_CLASS_DATETIME}的缺省變化值,允許輸入日期和時(shí)間。editText.setInputType(InputType.TYPE_DATETIME_VARIATION_NORMAL);//輸入類(lèi)型為{@link#TYPE_CLASS_DATETIME}的缺省變化值,只允許輸入一個(gè)日期。editText.setInputType(InputType.TYPE_DATETIME_VARIATION_DATE);//輸入類(lèi)型為{@link#TYPE_CLASS_DATETIME}的缺省變化值,只允許輸入一個(gè)時(shí)間。editText.setInputType(InputType.TYPE_DATETIME_VARIATION_TIME);//輸入類(lèi)型為決定所給文本整體類(lèi)的位掩碼editText.setInputType(InputType.TYPE_MASK_CLASS);//輸入類(lèi)型為提供附加標(biāo)志位選項(xiàng)的位掩碼editText.setInputType(InputType.TYPE_MASK_FLAGS);//輸入類(lèi)型為決定基類(lèi)內(nèi)容變化的位掩碼editText.setInputType(InputType.TYPE_MASK_VARIATION);//輸入類(lèi)型為小數(shù)數(shù)字,允許十進(jìn)制小數(shù)點(diǎn)提供分?jǐn)?shù)值。editText.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);//輸入類(lèi)型為數(shù)字是帶符號(hào)的,允許在開(kāi)頭帶正號(hào)或者負(fù)號(hào)editText.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED);//輸入類(lèi)型為{@link#TYPE_CLASS_NUMBER}的缺省變化值:為純普通數(shù)字文本editText.setInputType(InputType.TYPE_NUMBER_VARIATION_NORMAL);//輸入類(lèi)型為{@link#TYPE_CLASS_NUMBER}的缺省變化值:為數(shù)字密碼editText.setInputType(InputType.TYPE_NUMBER_VARIATION_PASSWORD);//輸入類(lèi)型為自動(dòng)完成文本類(lèi)型editText.setInputType(InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE);//輸入類(lèi)型為自動(dòng)糾正文本類(lèi)型editText.setInputType(InputType.TYPE_TEXT_FLAG_AUTO_CORRECT);//輸入類(lèi)型為所有字符大寫(xiě)editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);//輸入類(lèi)型為每句的第一個(gè)字符大寫(xiě)editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);//輸入類(lèi)型為每個(gè)單詞的第一個(gè)字母大寫(xiě)editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS);//輸入多行文本editText.setInputType(InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE);//進(jìn)行輸入時(shí),輸入法無(wú)提示editText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);//輸入一個(gè)短的,可能是非正式的消息,如即時(shí)消息或短信。editText.setInputType(InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE);//輸入長(zhǎng)內(nèi)容,可能是正式的消息內(nèi)容,比如電子郵件的主體editText.setInputType(InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE);//輸入文本以過(guò)濾列表等內(nèi)容editText.setInputType(InputType.TYPE_TEXT_VARIATION_FILTER);//輸入一個(gè)電子郵件地址editText.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);//輸入電子郵件主題行editText.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT);//輸入一個(gè)密碼editText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);//輸入老式的普通文本editText.setInputType(InputType.TYPE_TEXT_VARIATION_NORMAL);//輸入人名editText.setInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME);//輸入郵寄地址editText.setInputType(InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS);//輸入語(yǔ)音發(fā)音輸入文本,如聯(lián)系人拼音名稱(chēng)字段editText.setInputType(InputType.TYPE_TEXT_VARIATION_PHONETIC);//輸入U(xiǎn)RIeditText.setInputType(InputType.TYPE_TEXT_VARIATION_URI);//輸入對(duì)用戶(hù)可見(jiàn)的密碼editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);//輸入網(wǎng)頁(yè)表單中的文本editText.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);//輸入網(wǎng)頁(yè)表單中的郵件地址editText.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS);//輸入網(wǎng)頁(yè)表單中的密碼editText.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD);?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Android EditText 不得不说的InputFilter、TextWatcher、ActionMode.Callback、OnEditorActionListener的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [css] 使用纯css来创建一个滑块
- 下一篇: android preference-h