第一个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类型含义与如何定义


posted @ 2015-07-24 22:18  cuiz_book  阅读(1167)  评论(0编辑  收藏  举报