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>
      
原文地址:https://www.cnblogs.com/wisdomzhang/p/12683500.html