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设置Edittext只能输入字母数字弹出英文键盘
  2. androidSDK无法更新的解决方法之一
  3. android全屏去掉title栏的多种实现方法
  4. android中如何获取文件的路径总结
  5. Android之Service学习篇一:Service启动方式之startService
  6. android 中隐藏EditText的下划线方法
  7. View类的XML属性、相关方法及说明
  8. Android:WebView与Javascript交互(相互调用参数、传值)
  9. webkit for android

随机推荐

  1. 【Android】Android(安卓)NDK开发扫盲及
  2. 在Android中监控来电和去电
  3. 我的Android之旅——学习、项目、心态
  4. (译文)如何成为一个更好的Android开发者:30
  5. Android初体验之星座及生肖查询的思路
  6. Android表达式计算器
  7. Android中图片实现按钮点击效果
  8. 在Android中调用WebService
  9. 说说android下TV版本UC浏览器模拟鼠标的
  10. android:布局参数,控件属性及各种xml的作