• EditTextView相关控制


    EditTextView相关的控制

    最近做一些简单工作比较多,关于edittextview使用比较多,来总结一下

    1.获得焦点,取消焦点

    如何自动获取焦点,如何取消自动获取焦点。

    之前写过一些东西,参考链接:https://www.cnblogs.com/wisdomzhang/p/12303577.html

    2.获取焦点监听

    et_pwd.setOnFocusChangeListener(new View.OnFocusChangeListener() {            @Override            
        public void onFocusChange(View v, boolean hasFocus) {                		if (hasFocus) {                 
        		
        	} else {     
            	//to do something
        	}          
       }      
    });
    

    3.文本输入监听

    //文本改变 里面的有什么
    et_pwd.addTextChangedListener(new TextWatcher() {    
            @Override    
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {  
            //文本改变之前 s从start开始,会有count个字符被替换,最后成为after
            }
        
            @Override    
            public void onTextChanged(CharSequence s, int start, int before, int count) {     
             //文本改变中 s从start开始,有before个字符已经被替换为count个字符
                if (mpwd == null || s.length() != mpwd.length()) {            
                    mpwd = s.toString();      
                }   
            }   
        
            @Override    
            public void afterTextChanged(Editable s) {   
            //文本改变后
            }
        });
    

    4.文本输入过滤 InputFilter

    InputFilter[] filters = { new InputFilter() { 
        @Override   
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            //to do something
        }
    },	...};
    et_value.setFilters(filters); //可以添加多种过滤
    

    输入中有一个,不常见的问题就是输入联想。输入法自动给你添加一些文字,这个时候,会给他添加一个过滤。

    5.文本类型的控制

    a.文本输入的类型有两种方案:

    • 代码控制如下:

      et_value.setInputType(InputType.TYPE_CLASS_TEXT | ...);
      
    • xml控制:

      android:inputType="textWebPassword"
      

    b.密码是否可见

    //显示密码
    et_pwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
    
    //隐藏密码
    et_pwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
    

    c.输入来的类型控制

    • 只输入数字,只输入英文字符,输入数字和字母,只输入汉字等等。

      有一些解决办法:

      • 使用xml的属性,digits="123456789" digits="12345xml"等等,来控制输入的字符。

      • 使用textwatcher,来控制输入,过滤掉输入的类容

      • //控制只能输入指定的特殊字符
        editText.setKeyListener(new NumberKeyListener(){
        	@Override  
            protected char[] getAcceptedChars() {  
                return new char[] { '1', '2', '3', '4', '5', '6', '7', '8','9', '0' };  
            }  
            
        	@Override  
            public int getInputType() {  
                // TODO Auto-generated method stub   
                return android.text.InputType.TYPE_CLASS_PHONE;  
            }  
        });
        
      • 只能输入中文

        @Override
        public void afterTextChanged(Editable s) {
        	//中文过滤
        	String inputStr = clearLimitStr(regex, str);
        	et_value.removeTextChangedListener(this);
        	// et.setText方法可能会引起键盘变化,所以用editable.replace来显示内容
        	s.replace(0, s.length(), inputStr.trim());
        	et_value.addTextChangedListener(this);
        }
        private String clearLimitStr(String regex, String str) {
            return str.replaceAll(regex, "");
        }
        private String regex = "[^u4E00-u9FA5]";
        
    • 输入的长度控制,length 就可以了

      如果是长度超过控件宽度,可以滑动显示文本,可以设置如下:

      et_value.setSingleLine(true);
      et_value.setHorizontallyScrolling(true);
      
      //中文的长度限制
      new InputFilter() { //中文长度限制,50
          @Override
          public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
              int keep = itemValue.getLength() - (dest.length() - (dend - dstart));
              if (keep <= 0) {
                  Toast.makeText(m, "最多只能输入" + mMax + "个汉字", Toast.LENGTH_SHORT).show();
                  return "";
              } else if (keep >= end - start) {
                  return null;
              } else {
                  keep += start;
                	if (Character.isHighSurrogate(source.charAt(keep - 1))) {
                      --keep;
                      if (keep == start) {
                          return "";
                      }
                  }
                  return source.subSequence(start, keep);
              }
          }
      }
      

    6.弹出键盘

    //弹出键盘
    InputMethodManager imm = (InputMethodManager) LoginActivity.this .getSystemService(Context.INPUT_METHOD_SERVICE);                  
    imm.showSoftInput(et_pwd, InputMethodManager.RESULT_SHOWN);               
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 
    

    7.样式的修改

    • 焦点光标的颜色

      //属性
      android:textCursorDrawable="@drawable/shape_login_color_cursor"
      //样式
      <shape xmlns:android="http://schemas.android.com/apk/res/android"
          android:shape="rectangle">
          <size android:width="1dp" />
          <solid android:color="@color/color_login_bg_normal" />
      </shape>
      
    • 下划线的颜色

      • 不要下划线 background = "@null" 或者设置为 background = "#ffffff"

      • android:theme 方式修改

        <style name="EditTextStyle">
            <!--表示控件默认的颜色-->
            <item name="android:colorControlNormal">#ccc</item>
            <!--表示控件被激活时的颜色-->
            <item name="android:colorControlActivated">#ccc</item>
        </style>
        
  • 相关阅读:
    applycationContext.xml文件配置信息
    原生json的异步操作
    解析xm文件
    druid(德鲁伊)连接池的DataSourceUtils的写法及原生写法
    MYSQL的JDBCUtils的写法
    模拟服务器
    关于函数式接口
    浅谈树和二叉树
    &和&&的区别
    全排列问题(c语言实现)
  • 原文地址:https://www.cnblogs.com/wisdomzhang/p/12683500.html
Copyright © 2020-2023  润新知