android 更改密码显示风格

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
        打开超链接。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了实现Android修改密码,需要在应用程序中创建一个修改密码界面,让用户输入原始密码和新密码。然后,将这些信息发送到服务器进行验证和更新。以下是实现Android修改密码的一般步骤: 1.创建一个修改密码的布局文件,包括原始密码和新密码的输入框以及一个提交按钮。 ```xml <EditText android:id="@+id/et_old_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入原始密码" /> <EditText android:id="@+id/et_new_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入新密码" /> <Button android:id="@+id/btn_submit" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="提交" /> ``` 2.在Java代码中获取输入框中的原始密码和新密码,并将其发送到服务器进行验证和更新。 ```java EditText etOldPassword = findViewById(R.id.et_old_password); EditText etNewPassword = findViewById(R.id.et_new_password); Button btnSubmit = findViewById(R.id.btn_submit); btnSubmit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String oldPassword = etOldPassword.getText().toString(); String newPassword = etNewPassword.getText().toString(); // 将原始密码和新密码发送到服务器进行验证和更新 // ... } }); ``` 3.在服务器端验证原始密码是否正确,并将新密码更新到数据库中。 ```java // 假设使用Java Servlet实现服务器端代码 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String oldPassword = request.getParameter("old_password"); String newPassword = request.getParameter("new_password"); // 验证原始密码是否正确 if (checkOldPassword(oldPassword)) { // 更新新密码到数据库中 updatePassword(newPassword); response.getWriter().write("密码修改成功"); } else { response.getWriter().write("原始密码错误"); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值