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