第一个app-进阶:1、让EditText屏蔽软键盘仍能光标闪动:2、EditText 的inputType参数类型(密码方式-隐藏显示、只允许输入数字等等)
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"
但始终没有光标显示并闪动。。
说明上述setInputType(InputType.TYPE_NULL); 方法不但屏蔽了软键盘,也屏蔽了光标
于是…………
---->在网上找到了这个方法----====>
//屏蔽输入框的软键盘弹出--(此方法光标依然能显示并闪动) 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"--输入法多行(不一定支持)
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"--时间键盘
对于InputType,再看看这里
【整理】Android中EditText中的InputType类型含义与如何定义