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"--输入法多行(不一定支持) 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"--时间键盘
时间: 2024-10-11 05:05:59