登录注册那些事儿(一)

EditText之输入

一、设定输入字符

1、 设定输入内容

例如:xml中,Android:inputType="textPassword"

             java中,myEditText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

或者使用   android:digits="0123456789"

再例如     editText.setInputType(InputType.TYPE_CLASS_NUMBER);//调用数字键盘

                 editText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);//英文

这类文章太多了诸多博客中大神“ 維智 ”的相对更详细Android之设置EditText输入类型(setInputType()方法和android:inputType属性)感兴趣的可以看看

① 设定输入字符类型

         这类文章也很多,推荐一篇大牛一点点征服”的EditText限制输入字符类型的几种方式

② 设定是否可编辑

         android:editable="true"//可编辑

         android:focusable="false"//不弹出软键盘

1)EditTex有焦点(focusable为true)阻止输入法弹出

         editText.setOnTouchListener(newOnTouchListener(){

                  public boolean onTouch(View view,MotionEvent event){

                             editText.setInputType(Input.TYPE_NULL);//关闭软键盘

                               return false;

                  }

         });

(2)EditText无焦点(focusable=false)时阻挡输入法弹出

           InputMethodManagerimm=(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);

           imm.hideSoftInputFromWindow(editText.getWindowToken(),0);

③ 最简单的位数设定

         XML中android:maxLength="16"

         在代码中控制editText.setFilters(newInputFilter[]{newInputFilter.LengthFilter(16)});

2、限定输入6个字符,无论数字、字母还是汉字

      有时需要限定输入汉字个数怎么办,如下所示:

//设定输入的内容最多为6个字符
etPhone3.addTextChangedListener(newTextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s,int start,intcount, int after){
    }
    @Override
    public void onTextChanged(CharSequence s,intstart, intbefore,int count){
    }
    @Override
    public void afterTextChanged(Editable s) {
        int editStart= 0;
        int editEnd= 0;
        int maxLen= 6;
        editStart = etPhone3.getSelectionStart();
        editEnd = etPhone3.getSelectionEnd();
        while (calculateLength(s.toString())>maxLen) {
           s.delete(editStart - 1, editEnd);
            editStart--;
            editEnd--;
            Log.d("TextChanged","editStart = " + editStart + " editEnd = " +editEnd);
        }
    }
});

 

 

private int calculateLength(Stringetstring) {
        char[]ch =etstring.toCharArray();
        int varlength= 0;
        for (inti= 0; i < ch.length; i++) {
            // changed by zyf 0825 ,bug 6918,加入中文标点范围,TODO标点范围有待具体化
             if ((ch[i]>= 0x2E80 && ch[i] <=  0xFE4F) || (ch[i] >= 0xA13F &&ch[i] <=  0xAA40) || ch[i] >= 0x80) {  //  中文字符范围 0x4e000x9fbb
                varlength = varlength +  2;
            } else {
               varlength++;
            }
        }
        Log.d("TextChanged","varlength =" + varlength);
        // 这里也可以使用getBytes,更准确嘛
//         varlength=etstring.getBytes(CharSet.forName("GBK")).lenght;// 编码根据自己的需求,注意 u8中文占3个字节...
         return varlength;
    }

 

二、设定输入手机号位数中间加空格

提供两种手机号加空格的方式:

   ① 利用大神Angel_jn编写的一个自定义editText

       原文链接为Android开发---手机号码输入框(满11位自动跳到下个输入框)

   ②  添加事件监听addTextChangedListener()

//手机号11位中间有空格--方法1

etPhone1.addTextChangedListener(new TextMobileListener());

class TextMobileListener implements TextWatcher {

 

    @Override

    public void beforeTextChanged(CharSequences, int start, int count, int after){

 

   }//                       设定获取焦点时,清空提示语

                       etPhone1.requestFocus();

 

    @Override

    public void onTextChanged(CharSequences, int start, int before, int count){

        int length = s.toString().length();

        //删除数字

        if (count== 0){

            if (length == 4){

                etPhone1.setText(s.subSequence(03));

            }

            if (length == 9){

                etPhone1.setText(s.subSequence(08));

            }

        }

        //添加数字

        if (count== 1){

            if (length == 4){

               String part1 = s.subSequence(03).toString();

               String part2 = s.subSequence(3, length).toString();

                etPhone1.setText(part1 + " " + part2);

            }

            if (length== 9){

               String part1 = s.subSequence(08).toString();

               String part2 = s.subSequence(8, length).toString();

                etPhone1.setText(part1 + " " + part2);

            }

        }

    }

 

    @Override

    public void afterTextChanged(Editables) {

        //将光标移动到末尾

        etPhone1.setSelection(etPhone1.getText().toString().length());

        //处理s

        if (s!= null &&s.length()== 13){

            if (etPhone1.isFocused()) {

                etPhone1.clearFocus();

//                        设定获取焦点时,

                 etPhone2.requestFocus();

           }        }   }}

 

三、设定输入的是数字加小数点

       还是紧跟大神"fshsoftCSDN博客“的步伐Android基础--EditText输入框限制小数的位数解决方法

四、设定某editText获取焦点是弹出软键盘,并清空提示语

① 清空提示语:

     etPhone1.setOnFocusChangeListener(onFocusAutoClearHintListener);

 

//    设置某edittext获取焦点时,清空提示语
    public View.OnFocusChangeListener onFocusAutoClearHintListener = new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            EditText textView = (EditText) v;
            String hint;
            if (hasFocus) {
                hint = textView.getHint().toString();
                textView.setTag(hint);
                textView.setHint("");
            } else {
                hint = textView.getTag().toString();
                textView.setHint(hint);
    };         

② 弹出软键盘

(1)最简单的弹出:

 
 
 //    显示软键盘
    private void showSoftInputMethodManager(EditText mSearchEt){
        InputMethodManager inputManager = (InputMethodManager)mSearchEt.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.showSoftInput(mSearchEt, 0);
    }

2 延时弹出:

  有时我们需要设定可编辑状态时,将光标移动到某editText位置,清空提示语并弹出软键盘或许会出现不能弹出软件盘的状态:
例如:
//设置是否可编辑

editable_btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        showKeyboard();
    }
});
//    弹出软键盘
public  void showKeyboard() {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            Message msg = new Message();
            msg.what = 4;
            mHandler.sendMessage(msg);
        }
    }, 200);
}
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {            
                case 4:
                    if(etPhone2!=null){
                        //清空editText提示语
                        etPhone2.setOnFocusChangeListener(LoginActivity.onFocusAutoClearHintListener);
                        //设置可获得焦点
                        etPhone2.setFocusable(true);
                        etPhone2.setFocusableInTouchMode(true);
                        //请求获得焦点
                        etPhone2.requestFocus();
//                        设置光标移动到最后一位
                        etPhone2.setSelection(etPhone2.getText().toString().length());
                        //调用系统输入法
                        InputMethodManager inputManager = (InputMethodManager) etPhone2.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                        inputManager.showSoftInput(etPhone2, 0);
                    }
                    break;
                default:
                    break;
            }
        }
    };


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值