Android EditText修改显示方式

Android 中存在很多需要修改显示方法的地方,比如密码显示修改和字母大小写切换等。

第一直觉想到的方式就是修改输入模式setInputType()实现方式如下:

if(isChecked){  
    //显示密码框内容  
    mEditPwd.setInputType(InputType.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_NORMAL);  
}else{  
    //隐藏密码框内容  
    mEditPwd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);   
}  
mEditPwd.setSelection(mEditPwd.getText().toString().length());//设置光标位置在文本框末尾
第二种方式就是利用替代法,使用ReplacementTransformationMethod()的子类方法。

private void showPass(EditText passwordEt) {
		if (passwordEt.getTransformationMethod() == HideReturnsTransformationMethod.getInstance()) {
			passwordEt.setTransformationMethod(PasswordTransformationMethod.getInstance());
		} else {
			passwordEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
		}
		passwordEt.setSelection(passwordEt.getText().toString().length());
	}

HideReturnsTransformationMethod和PasswordTransformationMethod这两个方法都是继承自ReplacementTransformationMethod(),HideReturnsTransformationMethod指从隐藏状态显现;PasswordTransformationMethod指密码隐藏方式。

ReplacementTransformationMethod()中有两个方法比较直观,getOriginal()和getReplacement(),只要将需要被替换和替换后的字符分别以字符串数组的形式保存,并一一对应顺序。如下是一个小写切换到大写的方法。

public class InputLowerToUpper extends ReplacementTransformationMethod{ 
	    @Override 
	    protected char[] getOriginal() { 
	        char[] lower = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' }; 
	        return lower; 
	    } 
	   
	    @Override 
	    protected char[] getReplacement() { 
	        char[] upper = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' }; 
	        return upper; 
	    } 
	   
	}


个人喜欢使用第二种方式,基本能满足需求,可扩展性比较好,有特殊的显示需求时可以自己扩展;第一种方式可用模式较多,可扩展性差。

本文借鉴:http://sumile.cn/archives/56.html




你可能感兴趣的:(Android EditText修改显示方式)