http://developer.android.com/reference/android/widget/TextView.html#attr_android:password
我无法在android代码中找到它所应用的android:password xml属性。基本上,我想在代码中手动设置TransformationMethod,而不是使用XML属性。如果我打电话:
TextView.setTransformationMethod(new PasswordTransformationMethod())
然后会发生什么是TextView会正确地掩盖字符,直到TextView聚焦在横向方向上,它只是一个带有您正在输入的文本的全屏键盘。在该屏幕中,文本是纯文本。显然,XML属性android:password不仅仅是设置转换方法。任何人都可以指出我在Android代码中解释XML属性的位置,或者告诉我还需要做些什么才能正确掩盖字符?
我无法使用XML属性的原因是因为我正在进行一些特定的字符屏蔽,我想要纯文本中的连字符,同时屏蔽其他所有内容(*** - **)。为此,我扩展了PasswordTransformationMethod以基本上忽略连字符,因此我必须在代码中手动调用TransformationMethod设置器。
更新:所以我想我发现了这个问题。在TextView.setInputType(int type)中,它根据传入的InputType将TransformationMethod设置为PasswordTransformationMethod.TextView专门允许(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT)的InputType组合表示屏蔽的密码。如果您添加了任何其他InputType,它会将其归类为非密码......非常令人沮丧。
无论如何,问题是在TextView.setInputType(int type)结束时,它会调用
InputMethodManager imm = InputMethodManager.peekInstance();
if (imm != null) imm.restartInput(this);
我认为这是设置全屏键盘视图的TransformationMethod。如果只是在同一方法中没有将TransformationMethod设置为PasswordTransformationMethod,那么这将没问题,覆盖我之前设置的任何内容。
为了解决问题,由于某种原因,我似乎无法访问任何InputMethodManager的静态函数,如peekInstance()。我试图做的是扩展EditView,并覆盖setInputType(int类型)。但是,由于一些奇怪的原因,我不能调用上面提到的相同的InputMethodManager代码,我猜这个调用就是全屏键盘的视图用来设置它的TransformationMethod ......
我对Android的课程设计感到非常沮丧。他们通过与InputTypes进行比较来严格设置密码转换方法,比如设置密码转换方法,这非常令人困惑(按比例比较等)。并且没有办法覆盖他们的私有isPasswordInputType检查来更改手动“密码”的定义......
答案 0 :(得分:1)
您必须查看源代码。在android.git.kernel.org上查看frameworks / base.git。