android 更改密码显示风格

setTransformationMethod 则可以支持将输入的字符转换,包括清除换行符、转换为掩码。使用方法:

       textView.setTransformationMethod(PasswordTransformationMethod.getInstance());

综合来说,如果需要实现自己的转换,可以通过实现 TransformationMethod 接口来达到你的目的(比如让输入的所有字符都变成 a,或者输入 a 显示 z,输入 z 显示 a 等)。

 

 

 

1:TransformationMethod接口类:
TextView uses TransformationMethods to do things like replacing the
characters of passwords with dots, or keeping the newline characters from causing line breaks in single-line text fields. 大概意思就是说 TextView这个类用这个接口来替换一些东西,比如可以把密码形式的东西用点来代替,或者可以过滤掉换行符使之仍然保持单行属性。
两个方法:getTransformation()和onFocusChanged()方法,
getTransformation()意思是返回需要替换的源文本的代替字符串,比如在一个具有password属性的文本中每个字符用点来代替。
onFocusChanged()方法,这个没啥好解释的,获得或者失去焦点会调用该方法。
 但是TransformationMethod只是一个接口,如果要实现替换操作,最方便的做法是继承抽象类 ReplacementTransformationMethod,
描述:把getOriginal()方法的字符串替换成getReplacement()方法的相对于的字符串。ReplacementTransformationMethod实现了 TransformationMethod的方法,并提供了两个抽象函数。getOriginal()返回的是需要被替换的 char[],getReplacement()返回的是替换后的char[]。
示例代码(参考):
private class MyTransformationMethod extends ReplacementTransformationMethod{ 
        @Override
        protected char[] getOriginal() { 
            char[] original={'\r','a'}; 
            return original; 
        } 
        @Override
        protected char[] getReplacement() {        
            char[] replacement={' ','A'}; 
            return replacement; 
        } 
        
    }
然后只要在开始的地方调用一次textView.setTransformationMethod(new MyTransformationMethod())就可以替换了。
2:PasswordTransformationMethod类,该类提供一些密码特性的功能。
因为也是使用单例,所以可以使用PasswordTransformationMethod getInstance()方法获取实例。
示例代码:
           EditText etPassword=(EditText)findViewByid(R.id.etPassword);
CheckBox showPsw = (CheckBox)v;
if(showPsw.isChecked() == false){
etPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
}else{
etPassword.setTransformationMethod(null);
}
这样,可以根据单选框的事件改变输入框的密码显示情况。
另:关于TextView的setInputType(int)方法可以更改 TextView 的输入方式:Contact、Email、Date、Time、Short Message、Normal Text、Password 等。还可以指定各种更正选项,如 单词首字母大写、句子首字母大写、自动更正等。
 比如:
int inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT| InputType.TYPE_TEXT_FLAG_MULTI_LINE |InputType.TYPE_TEXT_FLAG_MULTI_LINE |InputType.TYPE_TEXT_FLAG_AUTO_CORRECTInputType.TYPE_TEXT_FLAG_AUTO_CORRECTInputType.TYPE_TEXT_FLAG_AUTO_CORRECT
editText.setInputType(inputType);
而 setTransformationMethod 则可以支持将输入的字符转换,包括清除换行符、转换为掩码。使用如下:
editText.setTransformationMethod(PasswordTransformationMethod.getInstance());
所以有时候可能需要EditText既输入数字,又要按密码形式输入,可以使用以下代码:
editText.setInputType(InputType.TYPE_CLASS_NUMBER);  
editText.setTransformationMethod(PasswordTransformationMethod.getInstance());
3:TimeKeyListener,在一个文本域键入内容时进行时间约束检查,这个类继承自NumberKeyListener,先说TimeKeyListener,getInputType()方法表明可以键入任何符合时间格式的时间,getAcceptedChars()方法是说输入可接受的字符,这里因为是对NumberKeyListener那个抽象方法的实现,因此指定符合字符为  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'm', 'p', ':'  ,也因为是单例,所以可以通过getInstance()方法获取实例。
抽象方法NumberKeyListener描述对文本区域键入内容相关类,getAcceptedChars()是一个未实现的方法,表明哪些字符可被接受,如下使用比如:
public char [] getAcceptedChars(){
 char [] myChar ={'a','b','c','d','e','f','g','h','i'.......};
 return myChar;
}
editText.setKeyListener(new numberKeyListener(){
//把抽象函数实现
});
4:TextKeyListener类 ,快捷键相关类,具体使用:
KeyListener子类:BaseKeyListener, DateKeyListener, DateTimeKeyListener,
DialerKeyListener, DigitsKeyListener, MultiTapKeyListener,
NumberKeyListener, QwertyKeyListener, TextKeyListener,
TimeKeyListener:
EditText设定快捷键继承TextKeyListener,即
EditText v = (EditText)findViewById(R.id.edt);
v.setKeyListener(input);
   KeyListener input = new TextKeyListener(TextKeyListener.Capitalize.NONE,true){  
boolean f = true;
public boolean onKeyDown(View view, Editable text, int keyCode,
      KeyEvent event) {
       //以Enter为快捷键
       if(keyCode!=KeyEvent.KEYCODE_ENTER){
             f = super.onKeyDown(view, text, keyCode, event);
       }else{
             //相关逻辑代码
      f = true;
      }
      return f;
}
};
5:SingleLineTransformationMethod类,该类功能:替换\r为空,\n为空格
具体使用,可以使用getOriginal(),getReplacement()方法返回的字符串对文本进行替换,也可以直接自己新建类继承ReplacementTransformationMethod类,具体使用见上替换示例,因为这是一个关于单行特性的一个类,因此会讲换行符替换为空格,讲返回按键设为无效。
6:ScrollingMovementMethod,这是一个关于TextView滚动文本的类,提供四个方向的滚动,示例代码:
  mTextView.setMovementMethod(ScrollingMovementMethod.getInstance());
设置这行属性后可以手动对文本进行拖动。
同时还可以设置onClick事件,两者互不影响。
7:HideReturnsTransformationMethod类:替换返回按键类,讲返回按钮替换为没有宽度的空格字符\uFEFF。
8:DigitsKeyListener类:顾名思义,只能输入数字,具体使用:
EditText et= (EditText) findViewById(R.id.et);
DigitsKeyListener numericOnlyListener = new DigitsKeyListener(false,true);
et.setKeyListener(numericOnlyListener);
9:DialerKeyListener类:拨号键相关类, 可以键入拨号键盘的按键,如下: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '#', '*', '+', '-', '(', ')', ',', '/', 'N', '.', ' ', ';' ,具体使用类似。
DateTimeKeyListener类:日期,时间格式类,
10:MovementMethod
        处理方向键事件的接口。null禁用方向键移动光标和滚动。
        相关方法:TextView::setMovementMethod (MovementMethod movement)
    ArrowKeyMovementMethod
        移动光标。
    ScrollingMovementMethod
        滚动。
    LinkMovementMethod
        打开超链接。

更多相关文章

  1. android studio 3.6.0 绑定视图新特性的方法
  2. androidSDK无法更新的解决方法之一
  3. android全屏去掉title栏的多种实现方法
  4. View类的XML属性、相关方法及说明
  5. android 中隐藏EditText的下划线方法
  6. Android调用系统默认浏览器访问的方法
  7. android Uri获取真实路径转换成File的方法
  8. Android 窗帘(Curtain Menu)效果五之应用场景和使用方法
  9. Linux系统下安装android sdk的方法步骤

随机推荐

  1. Android Studio-断点调试-no executable
  2. Android(安卓)退出应用程序问题
  3. android精仿今日头条源码,饿了么点餐源码
  4. [置顶] android 如何在自定义对话框中获
  5. Android原生集成MUI框架进行混合开发
  6. Android 内存溢出和内存泄漏的区别
  7. androidの获取天气预报JSON 实现
  8. Windows环境下Android NDK的开发
  9. 实例9---我的地图
  10. Android(安卓)Studio 的四种打包方式