2011-12-22 79 views
5

我有一个应用程序,用户需要使用密码登录。我只想输入显示的最后一个字符,但我似乎只能看到所有字符或全部字符。在EditText中显示密码的最后一个字符

我试了几件事情:

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); 
password.setTransformationMethod(PasswordTransformationMethod.getInstance()); 
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 

和设置的inputType在XML。

我只在银河系s2上测试过,因为那是目前我办公室唯一的安卓设备,所以我不知道问题是否只出现在我的设备上。

编辑: 刚刚从一位同事的HTC Sensation进行测试,它确实在手机上工作,但问题仍然是如何在Galaxy S2上获得同样的东西?

+2

我相信这是制造商是如何实现的系统UI,它只是因设备而异设备,所以我非常有信心它不是东西,可以改变对开发商结束。 – Jakar 2011-12-22 10:07:42

+1

我相信这是一个设备范围的设置,而不是您可以在应用程序中更改的设置。如果您在“位置和安全设置”菜单中选择“可见密码”,则可以打开或关闭此功能。 – ethan 2011-12-22 14:24:00

+0

如果在横向检查您的EditText密码的方式,您会感到惊讶。 :) – Jin35 2011-12-22 16:14:22

回答

16

自从问到这个问题已有近1年的时间了:P。但我有相同的要求,并已成功实现它。传递MyTransformation类的一个对象作为setTransformationMethod中的一个参数,你很好去:)这里是代码。

public class MyTransformation extends PasswordTransformationMethod{ 

    @Override 
    public CharSequence getTransformation(CharSequence source, View view) { 
     return new PasswordCharSequence(source); 
    } 

    private class PasswordCharSequence implements CharSequence { 
     private CharSequence mSource; 
     public PasswordCharSequence(CharSequence source) { 
      mSource = source; // Store char sequence 
     } 
     public char charAt(int index) { 
     //This is the check which makes sure the last character is shown 
      if(index != mSource.length()-1) 
       return '•'; 
      else 
       return mSource.charAt(index); 
     } 
     public int length() { 
      return mSource.length(); // Return default 
     } 
     public CharSequence subSequence(int start, int end) { 
      return mSource.subSequence(start, end); // Return default 
     } 
    } 
} 

enter image description here

+0

我只是放弃了它在除了我自己以外的大多数其他设备上的工作,但有了这段代码,它甚至可以在我的设备上工作。谢谢:) – Youri 2013-09-02 12:13:55

+0

@Youri:很高兴帮助:) – AndyFaizan 2013-09-04 08:58:12

+0

谢谢@AndyFaizan,你救我的时间! – wf9a5m75 2015-01-15 18:24:08

相关问题