標籤:
EditText屏蔽軟鍵盤後,游標消失問題
開始我有個需求:屏蔽系統軟鍵盤
於是找到並使用這個方法:
//edit_text1.setInputType(InputType.TYPE_NULL); //屏蔽軟鍵盤彈出
//edit_text2.setInputType(InputType.TYPE_NULL); //屏蔽軟鍵盤彈出
//edit_text3.setInputType(InputType.TYPE_NULL); //屏蔽軟鍵盤彈出
讓三個EditText都成功地沒有軟鍵盤彈出。
後來我要在EditText上設定顯示光線標:
android:textCursorDrawable="@null"
android:cursorVisible="true"
但始終無游標閃動。。
---->然後在網上找到了這個方法---->
//屏蔽軟鍵盤彈出--游標依然能閃動 hideSoftInputMethod(edit_text1); hideSoftInputMethod(edit_text2); hideSoftInputMethod(edit_text3);
--真正的方法在這->
/** ==== 隱藏系統鍵盤 ======*/ //用這個方法關閉系統鍵盤就不會出現游標消失的問題了 public void hideSoftInputMethod(EditText ed){ getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); String methodName = null; int currentVersion = android.os.Build.VERSION.SDK_INT; if(currentVersion >= 16){ // 4.2 methodName = "setShowSoftInputOnFocus"; // }else if(currentVersion >= 14){ // 4.0 methodName = "setSoftInputShownOnFocus"; } if(methodName == null){ //最低級最不濟的方式,這個方式會把游標給屏蔽 ed.setInputType(InputType.TYPE_NULL); }else{ Class<EditText> cls = EditText.class; Method setShowSoftInputOnFocus; try { setShowSoftInputOnFocus = cls.getMethod(methodName, boolean.class); setShowSoftInputOnFocus.setAccessible(true); setShowSoftInputOnFocus.invoke(ed, false); } catch (Exception e) { e.printStackTrace(); } } }EditText 的inputType參數類型
//edit_text2、edit_text3 輸入框只允許輸入數字
edit_text2.setInputType(InputType.TYPE_CLASS_NUMBER);
edit_text3.setInputType(InputType.TYPE_CLASS_NUMBER);
Button bn = new Button(this);
bn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EditText edit_text1 = (EditText) findViewById(R.id.edit_text1); EditText edit_text2 = (EditText) findViewById(R.id.edit_text2); EditText edit_text3 = (EditText) findViewById(R.id.edit_text3); Button b = (Button) findViewById(v.getId()); //判斷焦點(是否獲得了焦點) ==五星好評 // 檢查鍵入的內容(是否合格) // 將鍵入的內容追加給已獲得焦點的EditText // if (edit_text1.isFocused()) { try { Long.parseLong(b.getText().toString(), 16); //檢查是否可轉化為十六進位,即檢查輸入是否是十六進位數 edit_text1.append(b.getText());//內容追加 edit_text1.setError(null);//清除錯誤訊息框 } catch (Exception e) { edit_text1.setError("請輸入0~~F之內的十六進位數."); } }else if (edit_text2.isFocused()) { edit_text2.append(b.getText()); edit_text2.setError(null); } else if (edit_text3.isFocused()) { edit_text3.append(b.getText()); edit_text3.setError(null); } } });
在xml中可以這樣定義:
android:inputType參數類型說明android:inputType="none"--輸入一般字元android:inputType="text"--輸入一般字元android:inputType="textCapCharacters"--輸入一般字元android:inputType="textCapWords"--單詞首字母大小android:inputType="textCapSentences"--僅第一個字母大小android:inputType="textAutoCorrect"--前兩個自動完成android:inputType="textAutoComplete"--前兩個自動完成android:inputType="textMultiLine"--多行輸入android:inputType="textImeMultiLine"--IME多行(不一定支援)android:inputType="textNoSuggestions"--不提示android:inputType="textUri"--URI格式android:inputType="textEmailAddress"--電子郵件地址格式android:inputType="textEmailSubject"--郵件主題格式android:inputType="textShortMessage"--短訊息格式android:inputType="textLongMessage"--長訊息格式android:inputType="textPersonName"--人名格式android:inputType="textPostalAddress"--郵政格式android:inputType="textPassword"--密碼格式android:inputType="textVisiblePassword"--密碼可見格式android:inputType="textWebEditText"--作為網頁表單的文字格式設定android:inputType="textFilter"--文本篩選格式android:inputType="textPhonetic"--拼音輸入格式android:inputType="number"--數字格式android:inputType="numberSigned"--有符號數字格式android:inputType="numberDecimal"--可以帶小數點的浮點格式android:inputType="phone"--鍵盤android:inputType="datetime"android:inputType="date"--日期鍵盤android:inputType="time"--時間鍵盤
第一個app-進階:1、讓EditText屏蔽軟鍵盤仍能游標閃動:2、EditText 的inputType參數類型(密碼方式-隱藏顯示、只允許輸入數字等等)